我正在尝试获取触摸 Sprite 的触摸事件,我已经浏览了很多链接和教程,但它不起作用。我正在使用 Xcode IDE 和 Cocos2dx 2.1.4。 这是在cpp文件中理想情况下应该获取触摸事件的方法。
bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){
}
我正在尝试在 Sprite 上实现触摸事件。我创建了这样的 Sprite :
CCSize size = CCDirector::sharedDirector()->getWinSize();
CCSprite *backGroundSprint = CCSprite::create("bg.jpg");
CCSize imageSize = backGroundSprint->getContentSize();
backGroundSprint->setScaleX(size.width/imageSize.width);
backGroundSprint->setScaleY(size.width/imageSize.height);
backGroundSprint->setAnchorPoint(ccp(0, 0));
this->addChild(backGroundSprint,0);
我还通过这样做启用了触摸:
this->setTouchEnabled(true);
在
bool HelloWorld::init(){
在我的 .h 文件中我有这个
公开:
virtual void onEnter();
virtual void onExit();
virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
virtual void ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
virtual void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
最佳答案
为了让你的CCLayer获得触摸,你必须做两件事:
- 调用
setTouchEnabled(true)
。 - 重写
virtual void registerWithTouchDispatcher();
*.cpp 文件中的第二个方法应如下所示:
void Strona::registerWithTouchDispatcher()
{
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, this->getTouchPriority(), true);
}
此外,您还必须记住,CCSprite 没有触摸功能,因此在使用此方法时,您必须检查触摸是否发生在 Sprite 边界框内(或执行一些其他适合您需要的测试)。
关于Cocos2dx 中的触摸 Sprite 未检测到触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18738986/