cocos2d-x编译安卓版本时实现“再按一次退出程序”的效果

cocos2d-x编译安卓版本时实现“再按一次退出程序”的效果,第1张

概述转载自: http://blog.csdn.net/somestill/article/details/18046441  我们常见的安卓项目都有再按一次退出程序的提示,或者是要有一个确认框,这样可以避免由于误按导致的程序的退出,所以,当我们通过cocos2d-x制作项目时,也常用到这样的功能,如果通过c++来实现的话,会相对麻烦些,况且不同地方都要设置,相对麻烦,而通过原生的java就可以很好的

转载自:http://blog.csdn.net/somestill/article/details/18046441


我们常见的安卓项目都有再按一次退出程序的提示,或者是要有一个确认框,这样可以避免由于误按导致的程序的退出,所以,当我们通过cocos2d-x制作项目时,也常用到这样的功能,如果通过c++来实现的话,会相对麻烦些,况且不同地方都要设置,相对麻烦,而通过原生的java就可以很好的解决这个问题。

1、我用的cocos2d-x的版本为2.1.5,版本不同,可能具体的解决方法不同,但思路相同。(转载者注: 3.2版本亲测可用)

2、首先找到下图中的这个文件:src目录下的Cocos2dxGLSurfaceVIEw.java文件

找到其中的onKeyDown函数如下:

[java] view plain copy @H_404_31@@OverrIDe publicbooleanonKeyDown(finalintpKeyCode,finalKeyEventpKeyEvent){ switch(pKeyCode){ caseKeyEvent.KEYCODE_BACK: caseKeyEvent.KEYCODE_MENU: this.queueEvent(newRunnable(){ voIDrun(){ Cocos2dxGLSurfaceVIEw.this.mCocos2dxRenderer.handleKeyDown(pKeyCode); } }); returntrue; default: super.onKeyDown(pKeyCode,pKeyEvent); } } 修改为如下代码:

@OverrIDe finalKeyEventpKeyEvent){ switch(pKeyCode){ returnfalse; caseKeyEvent.KEYCODE_MENU: newRunnable(){ @OverrIDe voIDrun(){ Cocos2dxGLSurfaceVIEw.this.mCocos2dxRenderer.handleKeyDown(pKeyCode); } }); true; default: } } 也就是在监听到KEYCODE_BACK时,返回false,而之前返回的是true;
3、找到我们自己设置的安卓的包的标示文件,比如我的是com.planefight.org

打开其中的Planefight.java文件,重写onKeyDown方法。

系统自动生成的这个文件的原代码:

/**************************************************************************** copyright(c)2010-2011cocos2d-x.org http://www.cocos2d-x.org Permissionisherebygranted,freeofcharge,toanypersonobtainingacopy ofthissoftwareandassociateddocumentationfiles(the"Software"),todeal intheSoftwarewithoutrestriction,includingwithoutlimitationtherights touse,copy,modify,merge,publish,distribute,sublicense,and/orsell copIEsoftheSoftware,andtopermitpersonstowhomtheSoftwareis furnishedtodoso,subjecttothefollowingconditions: Theabovecopyrightnoticeandthispermissionnoticeshallbeincludedin allcopIEsorsubstantialportionsoftheSoftware. THESOFTWAREISPROVIDED"ASIS",WITHOUTWARRANTYOFANYKIND,EXPRESSOR IMPLIED,INCLUDINGBUTNOTliMITEDTOTHEWARRANTIESOFMERCHANTABIliTY, fitnessFORAPARTIculaRPURPOSEANDNONINFRINGEMENT.INNOEVENTSHALLTHE AUTHORSORcopYRIGHTHolDERSBEliABLEFORANYCLaim,damAGESOROTHER liABIliTY,WHETHERINANACTIONOFCONTRACT,TORTOROTHERWISE,ARISINGFROM, OUTOFORINCONNECTIONWITHTHESOFTWAREORTHEUSEOROTHERDEAliNGSIN THESOFTWARE. ****************************************************************************/ packagecom.planefight.org; importorg.cocos2dx.lib.Cocos2dxActivity; importorg.cocos2dx.lib.Cocos2dxGLSurfaceVIEw; importandroID.os.Bundle; importandroID.vIEw.KeyEvent; importandroID.Widget.Toast; classPlanefightextendsCocos2dxActivity{ protectedvoIDonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); publicCocos2dxGLSurfaceVIEwonCreateVIEw(){ Cocos2dxGLSurfaceVIEwglSurfaceVIEw=newCocos2dxGLSurfaceVIEw(this); //Planefightshouldcreatestencilbuffer glSurfaceVIEw.setEGLConfigChooser(5,6,0); background-color:inherit">0,0); background-color:inherit">16,0); background-color:inherit">8); returnglSurfaceVIEw; static{ System.loadlibrary("cocos2dcpp"); } 修改后的代码:

/**************************************************************************** copyright(c)2010-2011cocos2d-x.org http://www.cocos2d-x.org Theabovecopyrightnoticeandthispermissionnoticeshallbeincludedin allcopIEsorsubstantialportionsoftheSoftware. fitnessFORAPARTIculaRPURPOSEANDNONINFRINGEMENT.INNOEVENTSHALLTHE OUTOFORINCONNECTIONWITHTHESOFTWAREORTHEUSEOROTHERDEAliNGSIN THESOFTWARE. ****************************************************************************/ packagecom.planefight.org; importorg.cocos2dx.lib.Cocos2dxActivity; importorg.cocos2dx.lib.Cocos2dxGLSurfaceVIEw; importandroID.os.Bundle; importandroID.vIEw.KeyEvent; importandroID.Widget.Toast; privatelongexitTime=0; voIDonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); publicCocos2dxGLSurfaceVIEwonCreateVIEw(){ this); //Planefightshouldcreatestencilbuffer 8); returnglSurfaceVIEw; @OverrIDe publicbooleanonKeyDown(intkeyCode,KeyEventevent) { if(keyCode==KeyEvent.KEYCODE_BACK&&event.getAction()==KeyEvent.ACTION_DOWN) if((System.currentTimeMillis()-exitTime)>2000)//System.currentTimeMillis()无论何时调用,肯定大于2000 Toast.makeText(getApplicationContext(),"再按一次退出程序",Toast.LENGTH_SHORT).show(); exitTime=System.currentTimeMillis(); } else { finish(); System.exit(0); } returntrue; super.onKeyDown(keyCode,event); static{ System.loadlibrary("cocos2dcpp"); 也就是添加了重写的onKeyDown函数,并在之前声明了变量exitTime。

这样,就实现了在安卓应用任何页面按返回键均有提示“再按一次退出程序”;

总结

以上是内存溢出为你收集整理的cocos2d-x编译安卓版本时实现“再按一次退出程序”的效果全部内容,希望文章能够帮你解决cocos2d-x编译安卓版本时实现“再按一次退出程序”的效果所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1031268.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存