检测触摸Cocos2d-x

Jam*_*nay 6 c++ iphone objective-c cocos2d-iphone cocos2d-x

我正在使用Cocos2d-x并试图检测我的HelloWorld项目中的触摸.虽然我没有运气.

.H

class HelloWorld : public CCLayer{

private:
    CCSpriteBatchNode * _batchNode;
    CCSprite *_turkey;
    virtual void ccTouchesBegan(cocos2d::CCSet* touches, cocos2d::CCEvent* event);
Run Code Online (Sandbox Code Playgroud)

.ccp

void HelloWorld::ccTouchesBegan(cocos2d::CCSet* touches, cocos2d::CCEvent* event){
    CCLog("this");
}
Run Code Online (Sandbox Code Playgroud)

但问题是,当我点击屏幕时,"这个"永远不会出现在日志中.我在这里失踪了什么?

谢谢!

编辑,

我正在使用本教程. http://www.raywenderlich.com/11338/cocos2d-x-for-ios-and-android-space-game

And*_*rew 20

您必须在CCTouchDispatcher注册才能接收触摸:

在您的init()方法中写这个以接收触摸:

CCTouchDispatcher::sharedDispatcher()->addStandardDelegate(this, 0);
Run Code Online (Sandbox Code Playgroud)

另外,我建议您通过有针对性的触摸委托方法接收触摸事件:

virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);
Run Code Online (Sandbox Code Playgroud)

为了调用这些方法,您必须向触摸调度程序注册一点不同:

CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, 0, true);
Run Code Online (Sandbox Code Playgroud)

编辑

在新的cocos版本CCTouchDispatcher位于CCDirector:

它应该看起来像这样:

CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
Run Code Online (Sandbox Code Playgroud)

  • 所以现在我得到了错误,`断言失败:(假),函数ccTouchBegan,文件/ Iphone/SDK/Eyes/Eyes C++/Eyes C++/libs/cocos2dx/layers_scenes_transitions_nodes/CCLayer.cpp,第292行. (2认同)

Jam*_*nay 7

所以有些超级简单,只需添加

this->setIsTouchEnabled(true);

到我的init(); 功能.