Cocos2d-x android使用onKeyDown监听返回键实现二次返回退出

Cocos2d-x android使用onKeyDown监听返回键实现二次返回退出,第1张

概述原文地址:http://50vip.com/390.html 一般的游戏或者软件,都会在android版本上做退出程序的功能,一般的实现方式有两种: 1.点击返回按键,d出确认是否退出; 2.点击返回,toast提示再次点击退出程序。 这两种方式实现都需要android上监听用户按下了android手机上的返回键,监听到了之后执行相应的 *** 作。 通过搜索,很容易知道可以实现activity类的方法

原文地址:http://50vip.com/390.HTML

一般的游戏或者软件,都会在androID版本上做退出程序的功能,一般的实现方式有两种:

1.点击返回按键,d出确认是否退出;

2.点击返回,toast提示再次点击退出程序。

这两种方式实现都需要androID上监听用户按下了androID手机上的返回键,监听到了之后执行相应的 *** 作。

通过搜索,很容易知道可以实现activity类的方法

public boolean onKeyDown(final int pKeyCode,final KeyEvent pKeyEvent)

实现对用户按键的监听,但是将代码加入到cocos2d-x生成的Java代码中的AppActivity中,发现根本不起作用,没法监听到用户的按键 *** 作,找官方api文档,发现:

public booleanonKeyDown(int keyCode,KeyEventevent)

Since:API Level 1

Called when a key was pressed down and not handled by any of the vIEws insIDe of the activity.So,for example,key presses while the cursor is insIDe a TextVIEw will not trigger the event (unless it is a navigation to another object) because TextVIEw handles its own key presses.

If the focused vIEw dIDn't want this event,this method is called.

这段文字我需要强调的是红色标记部分,翻译的意思是:当用户按下一个按键的时候调用,但是前提是这个事件没有被其他的任何vIEws监听并处理。

因此不难得知,在cocos2d-x游戏中,在实现的onKeyDown方法监听不到返回键,是因为这个返回键事件已经被其他的onKeyDown处理掉了,具体是谁呢?看cocos2d-x的androID版本代码(framework/scocos2d-x/cocos/2d/platform/androID/java/src/org/cocos2dx/lib/Cocos2dx/GLSurfaceVIEw.java)。其中实现了onKeyDown方法:

@OverrIDepublic boolean onKeyDown(final int pKeyCode,final KeyEvent pKeyEvent) {    switch (pKeyCode) {        case KeyEvent.KEYCODE_BACK:                     case KeyEvent.KEYCODE_MENU:            this.queueEvent(new Runnable() {             @OverrIDe            public voID run() {                Cocos2dxGLSurfaceVIEw.this.mCocos2dxRenderer.handleKeyDown(pKeyCode);            }        });        return true;        default:            return super.onKeyDown(pKeyCode,pKeyEvent);    }}

这个里面,按键KeyEvent.KEYCODE_BACK被监听了,只要在这里不作处理即可(return false),改成如下代码:

@OverrIDepublic boolean onKeyDown(final int pKeyCode,final KeyEvent pKeyEvent) {    switch (pKeyCode) {        case KeyEvent.KEYCODE_BACK:            return false;        case KeyEvent.KEYCODE_MENU:            this.queueEvent(new Runnable() {             @OverrIDe            public voID run() {                Cocos2dxGLSurfaceVIEw.this.mCocos2dxRenderer.handleKeyDown(pKeyCode);            }        });        return true;        default:            return super.onKeyDown(pKeyCode,pKeyEvent);    }}
这样在你自己的cocos2d-x游戏Activity中就可以监听返回键了,在AppActivity中重写onKeyDown方法,如下:
private long mkeyTime = 0;public boolean onKeyDown(int keyCode,KeyEvent event) {    //二次返回退出    if (keyCode == KeyEvent.KEYCODE_BACK) {        if ((System.currentTimeMillis() - mkeyTime) > 2000) {            mkeyTime = System.currentTimeMillis();            Toast.makeText(this,"再按一次退出游戏",Toast.LENGTH_LONG).show();        } else {            finish();            System.exit(0);        }        return false;    }    return super.onKeyDown(keyCode,event);}
然后运行游戏, 点击返回键试试,有没有Toast? 总结

以上是内存溢出为你收集整理的Cocos2d-x android使用onKeyDown监听返回键实现二次返回退出全部内容,希望文章能够帮你解决Cocos2d-x android使用onKeyDown监听返回键实现二次返回退出所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存