2

我正在尝试在触摸精灵时获得触摸事件,我已经浏览了许多链接和教程,但它不起作用。我正在使用 Xcode IDE 和 Cocos2dx 2.1.4。这是理想情况下应该在 cpp 文件中获得触摸事件的方法。

bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){

}

我正在尝试在精灵上实现触摸事件。我创建了这样的精灵:

    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);
4

3 回答 3

2

为了让您的 CCLayer 获得触摸,您必须做两件事:

  1. 调用setTouchEnabled(true)它。
  2. 覆盖virtual void registerWithTouchDispatcher();

*.cpp 文件中的第二种方法应如下所示:

void Strona::registerWithTouchDispatcher()
{
     CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, this->getTouchPriority(), true);
}

另外,您还必须记住 CCSprites 没有触摸功能,因此在使用这种方法时,您必须检查触摸是否发生在精灵边界框内(或根据您的需要进行一些其他测试)。

于 2013-09-11T12:08:52.110 回答
1

您启用触摸并将其注册在 .cpp 文件中

this->setTouchEnabled(true);
CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 0);
于 2013-12-13T09:10:55.960 回答
1

在 Cocos2dX 中检查 Sprite TouchEvent

void GameLayer::ccTouchesBegan(CCSet* touches, CCEvent* event)
{
    CCTouch* touch = (CCTouch*)( touches->anyObject() );
    CCPoint location = touch->getLocationInView();
    location = CCDirector::sharedDirector()->convertToGL(location);


    if(sprite->boundingBox().containsPoint(location))
{
    CCLog("Sprite Touched");
}
}
于 2013-12-23T11:03:51.003 回答