Android后退按钮无法在Cocos2d-x中运行

时间:2013-06-02 10:27:14

标签: android cocos2d-x

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

请帮忙。

5 个答案:

答案 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”中的后退按钮。