在Cocos2dx中触摸精灵时未检测到触摸事件

时间:2013-09-11 10:41:25

标签: touch cocos2d-x

我正在尝试触摸精灵上的触摸事件,我已经通过许多链接和教程,但它无法正常工作。使用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);

in

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

3 个答案:

答案 0 :(得分:2)

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

  1. 点击setTouchEnabled(true)
  2. 覆盖virtual void registerWithTouchDispatcher();
  3. * .cpp文件中的第二个方法应如下所示:

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

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

答案 1 :(得分:1)

启用触控并在.cpp文件中注册

this->setTouchEnabled(true);
CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 0);

答案 2 :(得分: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");
}
}