Ниже мой 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;
}
Этот код работает для меня сейчас! 🙂
Targeted Delegate для событий одного касания. Измените ваши события на что-то вроде этого:
virtual bool ccTouchBegan (CCTouch *pTouch, CCEvent *pEvent)
Вы можете прочитать больше о целевых и стандартных сенсорных делегатах на стороне iPhone документации Cocos2D на этом Ссылка на сайт
Написание делегата в моем методе инициализации, как описано ниже, решило проблему
CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 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);