cocos2d subclassing sprite to handle touch?

后端 未结 4 1482
陌清茗
陌清茗 2020-12-18 14:19

I\'m new to the cocos2d(-x) world.

I\'d like to detect a touch to a sprite, and tutorials/examples seem to suggest using layer to detect touch and find the approap

相关标签:
4条回答
  • 2020-12-18 14:49

    it is better and much more clear to handle touches in one place. but i think, no one can bar you to do this

    0 讨论(0)
  • 2020-12-18 14:49

    In cocos2d-x 3.0 alpha you can try this:

    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);
    
    0 讨论(0)
  • 2020-12-18 15:05

    Note: This answer might be outdated. I answered this at 2012.

    It is not a bad idea. Here is how I do it:

    header file:

    #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 file:

    #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
    }
    
    0 讨论(0)
  • 2020-12-18 15:06

    You do not need to subclass sprites to detect touch.

    Here, Follow this LINK its a nice place to get started with Cocos2d

    0 讨论(0)
提交回复
热议问题