我想在Android的后退按钮上退出我的Cocos2d-x游戏。为此,我在课程CCLayer::keyBackClicked
中重载了GameScene
方法,并且还从setKeypadEnabled(true)
调用了GameScene::init
。但是,按下后退按钮时从不调用keyBackClicked
方法,我已使用CCLog
消息进行了检查。我还需要做些什么来完成这项工作?我已经在这个主题上搜索了很多,并找到了上面的解决方案,但它没有用。
这是我的代码
bool GameScene:: init() {
if(CCLayer::init()) {
CCLog("Init");
this->setKeypadEnabled(true);
return true;
}
return false;
}
void GameScene:: keyBackClicked(void) {
CCLayer::keyBackClicked();
CCLOG("cclayer key back clicked");
exit(0);
}
请帮忙。
答案 0 :(得分:1)
如果GameScene扩展了CCLayer类 -
void GameScene:: keyBackClicked(void) {
CCDirector::sharedDirector()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
}
我认为首先结束主任然后退出是很重要的。
答案 1 :(得分:1)
致电this->setKeyPadEnable(true);
覆盖onKeyReleased方法:
void GameScene::onKeyReleased(EventKeyboard::KeyCode keyCode, cocos2d::Event *event)
{
// Back button pressed
if (keyCode == EventKeyboard::KeyCode::KEY_BACKSPACE) {
Director::getInstance()->end();
exit(0);
}
}
答案 2 :(得分:1)
CCLayer在onEnter()函数调用中添加委托函数,您可能需要在 GameScene :: onEnter()中调用 CCLayer :: onEnter ,或者您可能需要添加它在其他地方。
CCLayer::onEnter
//
...
if (m_bKeypadEnabled)
{
pDirector->getKeypadDispatcher()->addDelegate(this);
}
//
...
答案 3 :(得分:0)
void GameScene:: keyBackClicked(void)
{
CCLOG("cclayer key back clicked");
exit(0);
}
也启用
this->setKeyPadEnable(true);
答案 4 :(得分:0)
keyBackClicked仅在您的类(GameScene)继承自CCLayer时才起作用,否则它无效。从你的问题我认为你从CCScene继承你的类而不是CClayer,这就是为什么后退键按钮不起作用。 您还可以在Cocos2dxGLSurfaceView.java中处理函数“KeyDown”中的后退按钮。