Не удается получить штрихи в COCOS 2dx?

Ниже мой HelloWorld.h учебный класс:

class HelloWorld : public cocos2d::CCLayer
{
public:
HelloWorld();

// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtual bool init();

b2World* world;

// there's no 'id' in cpp, so we recommend returning the class instance pointer
static cocos2d::CCScene* scene();

// a selector callback
void menuCloseCallback(CCObject* pSender);

// implement the "static node()" method manually
CREATE_FUNC(HelloWorld);

virtual void draw();
virtual void ccTouchesEnded(cocos2d::CCSet* touches, cocos2d::CCEvent* event);
virtual void ccTouchesMoved(cocos2d::CCSet* touches, cocos2d::CCEvent* event);
virtual void ccTouchesBegan(cocos2d::CCSet* touches, cocos2d::CCEvent* event);
void update(float dt);};

И по моему HelloWorld.cpp класс я инициализировал мой init метод

bool HelloWorld::init(){
setTouchEnabled( true );
setAccelerometerEnabled( true );
scheduleUpdate();
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);
return true;
}

Этот код работает для меня сейчас! 🙂

0

Решение

Targeted Delegate для событий одного касания. Измените ваши события на что-то вроде этого:

virtual bool ccTouchBegan (CCTouch *pTouch, CCEvent *pEvent)

Вы можете прочитать больше о целевых и стандартных сенсорных делегатах на стороне iPhone документации Cocos2D на этом Ссылка на сайт

Написание делегата в моем методе инициализации, как описано ниже, решило проблему

    CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 1);
1

Другие решения

Если вы хотите отключить функцию multiTouch, вы можете использовать:

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){}

И поэтому вам необходимо:

bool init()
{
...
setTouchEnabled(true);
this->setTouchMode(ccTouchesMode::kCCTouchesOneByOne); // Important
}

Если вы пропустите последнюю строку, вам нужно будет переопределить их (режим multiTouch):

void ccTouchesBegan(cocos2d::CCSet* touches, cocos2d::CCEvent* event);
void ccTouchesMoved(cocos2d::CCSet* touches, cocos2d::CCEvent* event);
void ccTouchesEnded(cocos2d::CCSet* touches, cocos2d::CCEvent* event);
0