Cocos2d-x学习之---Andorid关于返回键退出的一些小总结

来源:互联网 发布:域名查ip地址 编辑:程序博客网 时间:2024/05/17 03:08

好久都没写博客了,今天是2014年的第一天,开个好头吧~~~祝自己和各位辛勤工作的码农们元旦快乐~!

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. 用Cocos2dx引擎开发游戏的时候,看见同事用过直接调用安卓自带的功能实现返回键退出,这样就非常方便啦,省去了每个界面写退出的代码。  

OK,切入正题。公司用的引擎是2.0.4版的,比较老,看同事调用的代码与网上的有点不同,JAVA我也不懂,或许一样也不一定了。。。我用的是2.1.5版的引擎;

因为涉及到的是JAVA代码的调用,所以工具用的是eclipse。

首先随便导入一个项目,现在我导入的是之前模仿写的微信飞机大战的项目,然后导入引擎的库文件(不知道这样说可不可以),将库文件导入到eclipse中就可以省去了每次复制库文件到项目中的操作。

如图所示,新建项目的时候这里是不会默认有库文件的,需要自己去复制一份过来,所以我就把这个库文件也导入进来了。这样以后再新建项目就可以不用去复制库文件了。


在上图这一堆的库文件中,我们需要动的是 Cocos2dxGLSurfaceView.java 这个文件,打开文件找到onKeyDown 这个方法,我们需要做的是改其中的一个参数,上代码:

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. @Override  
  2.     public boolean onKeyDown(final int pKeyCode, final KeyEvent pKeyEvent) {  
  3.         switch (pKeyCode) {  
  4.         case KeyEvent.KEYCODE_BACK:  
  5. //        AlertDialog ad = new AlertDialog.Builder(CrazyMole)  
  6. //                .setTitle("EXIT?")  
  7. //                .setMessage("Do you really want to exit?")  
  8. //                .setPositiveButton("YES", new DialogInterface.OnClickListener() {  
  9. //                    public void onClick(DialogInterface dialog, int which) {  
  10. //                        ((Cocos2dxActivity)CrazyMole).finish();  
  11. //                    }  
  12. //                })  
  13. //                .setNegativeButton("NO", new DialogInterface.OnClickListener() {  
  14. //                    public void onClick(DialogInterface dialog, int which) {  
  15. //  
  16. //                    }  
  17. //                }).create();  
  18. //                ad.show();  
  19.         return false;  
这里的操作就是在 KEYCODE_BACK 的按键事件中返回false,引擎默认是返回true,其中注释掉的地方是之前在网上看到的具体的操作,当时我把这些代码放到这里再打包看效果,是无效的,然后在网友告诉我这里只要返回false然后再在自己的工程中再重写这个方法,再把按返回键弹出对话框的代码写进去就可以了。现在这里改好了,之后就转入到自己具体工程相关代码的操作中去。

首先找到:

自己项目的src目录下,自己项目的java文件,即上图中叫做AirPlane.java 的文件,打开,代码如下:

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. package com.yekong.airplane;  
  2.   
  3. import org.cocos2dx.lib.Cocos2dxActivity;  
  4. import org.cocos2dx.lib.Cocos2dxGLSurfaceView;  
  5.   
  6. import android.os.Bundle;  
  7.   
  8. public class AirPlane extends Cocos2dxActivity{  
  9.       
  10.     protected void onCreate(Bundle savedInstanceState){  
  11.         super.onCreate(savedInstanceState);   
  12.     }  
  13.   
  14.     public Cocos2dxGLSurfaceView onCreateView() {  
  15.         Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);  
  16.         // AirPlane should create stencil buffer  
  17.         glSurfaceView.setEGLConfigChooser(5650168);  
  18.           
  19.         return glSurfaceView;  
  20.     }  
  21.   
  22.     static {  
  23.         System.loadLibrary("cocos2dcpp");  
  24.     }       
  25. }  
这是新建项目后引擎自己创建的东西,可以看到这个Acitivity中是没有之前看到的onKeyDown这个方法的,所以现在我们要重写一个:

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1.  public boolean onKeyDown(int keyCode, KeyEvent event){  
  2. //      switch (keyCode) {  
  3. //      case KeyEvent.KEYCODE_BACK:  
  4. //          AlertDialog.Builder build=new AlertDialog.Builder(this);  
  5. //          build.setTitle("注意")  
  6. //                  .setMessage("确定要退出吗?")  
  7. //                  .setPositiveButton("确定", new DialogInterface.OnClickListener() {  
  8. //                        
  9. //                      @Override  
  10. //                      public void onClick(DialogInterface dialog, int which) {  
  11. //                          // TODO Auto-generated method stub  
  12. //                          finish();  
  13. //                            
  14. //                      }  
  15. //                  })  
  16. //                  .setNegativeButton("取消", new DialogInterface.OnClickListener() {  
  17. //                        
  18. //                      @Override  
  19. //                      public void onClick(DialogInterface dialog, int which) {  
  20. //                          // TODO Auto-generated method stub  
  21. //                            
  22. //                      }  
  23. //                  })  
  24. //                  .show();  
  25. //          break;  
  26. //  
  27. //      default:  
  28. //          break;  
  29. //      }  
  30. //      return false;  
  31.         if (keyCode == KeyEvent.KEYCODE_BACK) {  
  32.             if ((System.currentTimeMillis() - mExitTime) > 2000) {// 如果两次按键时间间隔大于2000毫秒,则不退出  
  33.   
  34.                 Toast.makeText(this"再按一次退出程序", Toast.LENGTH_SHORT).show();  
  35.                 mExitTime = System.currentTimeMillis();// 更新mExitTime  
  36.   
  37.             } else {  
  38.                 System.exit(0);// 否则退出程序  
  39.   
  40.             }  
  41.             return true;  
  42.         }  
  43.         return super.onKeyDown(keyCode, event);  
  44.     }  
可以看到有两个方式,注释的那个指的是按一次返回键则弹出对话框,而没注释掉的那个指的是按两次返回键退出程序的操作,另外要注意后面那个方式要在这个方法前声明一个变量(不知道JAVA中可不可以这样说):

[java] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. private long mExitTime;  
重写这个方法之后,项目会报错,具体的原因就是没有导入相关的包,具体的操作eclipse会提示要导入什么包,所以挺方便的。

现在上图看操作:

首先是按两次退出程序:

再是按返回键弹出对话框的那种:

OK ,关于Android返回键退出的具体操作就这样啦。

在网上查相关方面的资料的是,网友们都是贴出具体的操作代码,然后没有说要加在哪里,所以我就折腾了好久才搞好,现在把这个写下来,留给以后看看吧;

再次申明:引擎是2.1.5版的,别的版本或许相关文件的目录会不同,但是具体的代码是这样的。


原文地址:http://blog.csdn.net/zh379835552/article/details/17732403

0 0