cocos2d子类化sprite来处理触摸?

时间:2012-07-06 01:18:46

标签: cocos2d-iphone touch sprite layer cocos2d-x

我是cocos2d(-x)世界的新手。

我想检测一个精灵的触摸,教程/示例似乎建议使用图层来检测触摸并找到带有边界框的合适的精灵。

子类化精灵是否允许触摸检测通常是一个坏主意?

4 个答案:

答案 0 :(得分:14)

注意:这个答案可能已经过时了。我在2012年回答了这个问题。

这不是一个坏主意。我是这样做的:

头文件:

#include "cocos2d.h"
using namespace cocos2d;
class TouchableSprite : public cocos2d::CCSprite, public CCTargetedTouchDelegate {
    public:
    virtual void onEnter();
    virtual void onExit();
    virtual bool ccTouchBegan(CCTouch* touch, CCEvent* event);
    virtual void ccTouchMoved(CCTouch* touch, CCEvent* event);
    virtual void ccTouchEnded(CCTouch* touch, CCEvent* event);
};

cpp文件:

#include "TouchableSprite.h"
void TouchableSprite::onEnter(){
    // before 2.0:
    // CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, 0, true);

    // since 2.0: 
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
    CCSprite::onEnter();
}
void TouchableSprite::onExit(){
    // before 2.0:
    // CCTouchDispatcher::sharedDispatcher()->removeDelegate(this);

    // since 2.0:
    CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
    CCSprite::onExit();
}
bool TouchableSprite::ccTouchBegan(CCTouch* touch, CCEvent* event){
    //do whatever you want here
    return true;
}
void TouchableSprite::ccTouchMoved(CCTouch* touch, CCEvent* event){
    //do what you want
}
void TouchableSprite::ccTouchEnded(CCTouch* touch, CCEvent* event){
    //do your job here
}

答案 1 :(得分:6)

在cocos2d-x 3.0 alpha中你可以试试这个:

auto listener = EventListenerTouchOneByOne::create();

listener->setSwallowTouches(true);

listener->onTouchBegan = [&](Touch* touch, Event* event){

    if (this->getBoundingBox().containsPoint(this->convertTouchToNodeSpace(touch))) {
        return true;
    }
    return false;

};

Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);

答案 2 :(得分:3)

在一个地方处理触摸会更好,更清晰。但我认为,没有人可以阻止你这样做

答案 3 :(得分:-3)

您不需要子画面精灵来检测触摸。

在这里,按照LINK这个开始使用Cocos2d的好地方