0

Cocos2d-x cpp プロジェクトに取り組んでいます。レイヤーで背景を移動するタッチイベントを正常に追加しました。今、レイヤーに CCMenuItemLabel を追加したいのですが、タッチすると CCMenuItemLabel が機能しないことがわかりました。どうすれば解決できますか?

これらの関数をレイヤーに追加しました:

virtual void ccTouchesBegan (CCSet *pTouches, CCEvent *pEvent);
virtual void ccTouchesMoved (CCSet *pTouches, CCEvent *pEvent);
virtual void ccTouchesEnded (CCSet *pTouches, CCEvent *pEvent);

MyLayer::init() 関数内:

this->setTouchEnabled(true);

CCLabelTTF* test = CCLabelTTF::create("tesetdd","Arial",40);
CCMenuItemLabel* menuLabel = CCMenuItemLabel::create(test,this,menu_selector(GameWall::menuCall));
menuLabel->setPosition(ccp(winSize.width/2,winSize.height/2));
this->addChild(menuLabel,1);

更新: CCMenuItemLabel を CCMenu に入れました。しかし、それでもうまくいきません。

CCLabelTTF* test = CCLabelTTF::create("tesetdd","Arial",40);
CCMenuItemLabel* menuLabel = CCMenuItemLabel::create(test,this,menu_selector(GameWall::menuCall));
menuLabel->setPosition(ccp(winSize.width/2,winSize.height/2));
CCMenu* menu = CCMenu::create(menuLabel,NULL);
menu->setPosition(CCPointZero);
this->addChild(menu,1);
4

2 に答える 2

1

CCMenuItems をレイヤーに直接追加しないでください。それらを CCMenu に追加し、その CCMenu をレイヤーに追加します。

于 2013-11-13T09:24:38.723 に答える
0

まず、@Kreiriに感謝します。

タッチイベント機能を次のように変更しました

virtual bool ccTouchBegan (CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchMoved (CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchEnded (CCTouch *pTouch, CCEvent *pEvent);

さらに2つの関数を追加します

virtual void onEnter();
virtual void registerWithTouchDispatcher();  

そして、最初のコードを onEnter に移動します

CCLabelTTF* test = CCLabelTTF::create("tesetdd","Arial",40);
CCMenuItemLabel* menuLabel =          CCMenuItemLabel::create(test,this,menu_selector(GameWall::menuCall));
menuLabel->setPosition(ccp(winSize.width/2,winSize.height/2));
CCMenu* menu = CCMenu::create(menuLabel,NULL);
menu->setPosition(CCPointZero);
this->addChild(menu,1);

onEnter() にさらに 3 つのコードを追加します。

this->setTouchEnabled(true);
registerWithTouchDispatcher();
menu->registerWithTouchDispatcher();

registerWithTouchDispatcher() 中:

void GameWall::registerWithTouchDispatcher(){
    //registe the single point touch,and take over all touch event
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,kCCMenuHandlerPriority,true);
}

最後に、onExit() で romoveDelegate() を忘れないでください。

void GameWall::onExit(){
    CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
}

説明させてください、文書を確認してください registerWithTouchDispatcher() は言うIf isTouchEnabled, this method is called onEnter.そしてOverride it to change the way CCLayer receives touch events.CCMenu と同じ.

于 2013-11-13T11:01:23.180 に答える