문제

In the new cocos2d-x 3.0rc I wanted to detect touch in a Layer. I have over ridden functions in my class as mentioned below.

virtual bool onTouchBegan(CCTouch* touch, CCEvent* event);
virtual void onTouchMoved(CCTouch* touch, CCEvent* event);
virtual void onTouchEnded(CCTouch* touch, CCEvent* event);

but touches are not getting detected. Any idea y is this happening?

도움이 되었습니까?

해결책

To enable touches I used the below code. works perfectly in cocos2d-x 3.0 RC1

void class_name::onEnter()
{
    Layer::onEnter();

    // Register Touch Event
    auto dispatcher = Director::getInstance()->getEventDispatcher();
    auto listener = EventListenerTouchOneByOne::create();

    listener->onTouchBegan = CC_CALLBACK_2(class_name::onTouchBegan, this);
    listener->onTouchMoved = CC_CALLBACK_2(class_name::onTouchMoved, this);
    listener->onTouchEnded = CC_CALLBACK_2(class_name::onTouchEnded, this);

    dispatcher->addEventListenerWithSceneGraphPriority(listener, this);
}

다른 팁

Detect Touch in Cocos2d-x 3.0

write code in (HelloWorld.h) {

cocos2d::EventListenerTouchAllAtOnce *Listner;
void onTouchesBegan(const std::vector<cocos2d::Touch *> &touches, cocos2d::Event *event);
    void onTouchesMoved(const std::vector<cocos2d::Touch *> &touches, cocos2d::Event *event);
    void onTouchesEnded(const std::vector<cocos2d::Touch *> &touches, cocos2d::Event *event);

}

write code in init Method(HelloWorld.cpp) {

 Listner = EventListenerTouchAllAtOnce::create();
    Listner->onTouchesBegan = CC_CALLBACK_2(HelloWorld::onTouchesBegan, this);
    Listner->onTouchesMoved = CC_CALLBACK_2(HelloWorld::onTouchesMoved, this);
    Listner->onTouchesEnded = CC_CALLBACK_2(HelloWorld::onTouchesEnded, this);
    _eventDispatcher->addEventListenerWithSceneGraphPriority(Listner, this);

}

enable touch on init() Or onEnter()

this->setTouchEnabled(true);
CCDirector::sharedDirector() -> getTouchDispatcher() -> addTargetedDelegate( this, 0, true );
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top