cocos2dx 3.0正式版手机返回键

用的是cocos3.0正式版本的
.h头文件:是public cocos2d::Layer的
void onKeyPressed(EventKeyboard::KeyCode keyCode,Event * pEvent);
.cpp中:
auto listener = EventListenerKeyboard::create();
listener->onKeyPressed = CC_CALLBACK_2(StartScene::onKeyPressed,this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener,this);

调用的函数:

void StartScene::onKeyPressed( EventKeyboard::KeyCode keyCode,Event * pEvent )
{
CCLOG(“start onKeyPressed”);
if (keyCode == EventKeyboard::KeyCode::KEY_BACKSPACE)
{
CCLOG(“keycode = KEY_BACKSPACE”);

    Director::getInstance()->end();
}

}
点返回键没有任何反应,这是怎么回事呢?

不要问了。这个问题。我提交了几个月。从3.0到现在一直没有解决。
论坛里各种回复都是不行的。全试过。
他们跟本就没有注意这个BUG

晕,不是吧

.h文件
void onKeyReleased(EventKeyboard::KeyCode keycode, Event* event);

.cpp文件

//注册捕捉监听
auto listenerkeyPad = EventListenerKeyboard::create();
listenerkeyPad->onKeyReleased = CC_CALLBACK_2(WelcomeScene::onKeyReleased, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listenerkeyPad, this);

void WelcomeScene::onKeyReleased(EventKeyboard::KeyCode keycode, Event* event)
{
switch (keycode)
{
case EventKeyboard::KeyCode::KEY_BACKSPACE: //返回键听
break;
case EventKeyboard::KeyCode::KEY_MENU: //菜单监听
break;
case::EventKeyboard::KeyCode::KEY_HOME:
break;
default:
break;
}
}

难道不是一个版本?我的一直没问题啊

我是点了没有反应,直接是这个函数没有调用到,我用的是3.0正式版本的

我用的都可以

我遇到过这个问题,把onKeyPressed改成onKeyReleased 就行了。
还有不明白为什么叫backspace,这不是退格键么,还不如叫esc。。。

原因很简单, android的按键事件触发的是onKeyReleased。而不是onKeyPressed。

下面贴上关键代码

1.android部分响应按键,接下来就调用jni接口了

public boolean onKeyDown(final int pKeyCode, final KeyEvent pKeyEvent) {
switch (pKeyCode) {
case KeyEvent.KEYCODE_BACK:
Cocos2dxVideoHelper.mVideoHandler.sendEmptyMessage(Cocos2dxVideoHelper.KeyEventBack);
case KeyEvent.KEYCODE_MENU:
case KeyEvent.KEYCODE_DPAD_LEFT:
case KeyEvent.KEYCODE_DPAD_RIGHT:
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_ENTER:
case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
case KeyEvent.KEYCODE_DPAD_CENTER:
this.queueEvent(new Runnable() {
@Override
public void run() {
Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleKeyDown(pKeyCode);
}
});
return true;
default:
return super.onKeyDown(pKeyCode, pKeyEvent);
}
}
2.jni接口被调用,按键Event创建 (TouchesJni.cpp)

JNIEXPORT jboolean JNICALL Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeKeyDown(JNIEnv * env, jobject thiz, jint keyCode) {
Director* pDirector = Director::getInstance();

auto iterKeyCode = g_keyCodeMap.find(keyCode);
if (iterKeyCode == g_keyCodeMap.end()) {
return JNI_FALSE;
}

cocos2d::EventKeyboard::KeyCode cocos2dKey = g_keyCodeMap.at(keyCode);
cocos2d::EventKeyboard event(cocos2dKey, false); // 虽然是keyDown,但被设置为released消息
cocos2d::Director::getInstance()->getEventDispatcher()->dispatchEvent(&event);
return JNI_TRUE;

}}
  1. 接下来就不用说了吧。。 所以在android下。 key事件永远不会响应onKeyPressed消息的。

诶。。。。。
从别的地方复制过来的,个个