2

我想在 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);
}

请帮忙。

4

5 回答 5

1

CCLayer 在 onEnter() 函数调用中添加委托函数,您可能需要在 GameScene::onEnter()中调用CCLayer::onEnter或者您可能需要在其他地方添加它。

CCLayer::onEnter
//
...
    if (m_bKeypadEnabled)
    {
        pDirector->getKeypadDispatcher()->addDelegate(this);
    }
//
...
于 2014-03-14T06:05:24.253 回答
1

如果 GameScene 扩展了 CCLayer 类 -

void GameScene:: keyBackClicked(void) {
    CCDirector::sharedDirector()->end();

    #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
        exit(0);
    #endif
}

我认为先结束导演再退出很重要。

于 2013-07-11T06:18:18.417 回答
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);
    }
}
于 2014-01-20T12:01:46.557 回答
0

keyBackClicked 仅在您的类(GameScene)从 CCLayer 继承时才有效,否则它不起作用。从你的问题我认为你从 CCScene 继承你的类而不是从 CClayer 这就是为什么后退按钮不起作用。您还可以在 Cocos2dxGLSurfaceView.java 中处理函数“KeyDown”中的后退按钮。

于 2014-01-31T11:49:57.073 回答
0
void GameScene:: keyBackClicked(void) 
{
    CCLOG("cclayer key back clicked");
    exit(0);
}

也启用

this->setKeyPadEnable(true);
于 2013-11-13T11:40:52.307 回答