Cocos2dx 中的触摸 Sprite 未检测到触摸事件

标签 touch cocos2d-x

我正在尝试获取触摸 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获得触摸,你必须做两件事:

  1. 调用 setTouchEnabled(true)
  2. 重写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/

相关文章:

c++ - 如何通过另一个应用程序 'show' 一个应用程序 (visual c++)

c++ - 使用调度函数更新 Sprite 位置

javascript - 触摸/点击时需要双击并单击时需要单击的 anchor 链接

javascript - 有没有更优雅的方法来检测触摸事件支持并分配 "click"或 "touchend"事件?

iphone - 禁用除特定 View 之外的所有 super View

selenium - 如何将 Selenium TouchActions 与 RemoteWebDriver 结合使用

c# - 统一点击检测游戏对象

android - 如何删除 CCPointArray 中的所有点

android - 使用 ANDROID NDK 编译时出错

android - C++ 中对构造函数的 undefined reference