cocos2d-xで地味にハマったこと

一昨日に少し書いた修羅場真っ直中なcocos2d-xな案件で、
分かれば簡単なことだけどハマったことを2つほど。

・マルチタッチに対応するとき
色々と調べてると

setTouchEnabled(true);
setTouchMode(kCCTouchesAllAtOnce);

↑をするってのは書いてあるんだけど、
これだけだとマルチタッチ用のイベントは飛んでくるのに、
明らかにIDが0ばかりだったり、
2本目のイベントが飛んでこなかったりと挙動がおかしい・・・
これも分かると簡単、ios/AppController.mmの
起動時に呼び出されるdidFinishLaunchingWithOptions内で、
EAGLView初期化時に、

__glView.multipleTouchEnabled = true;

をやらないとダメってだけ。
これになかなか気付かなかった・・・

・CCSpriteとかCCNodeを継承して自作したときのタッチイベント
CCTargetedTouchDelegateクラスも継承して、

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

をやればおkってのはあちこちで見掛けたんだけど、
これだけだと次のシーンへ移ったときに落ちる場合が・・・
登録したデリゲートを消さないとダメなのかな?とデストラクタで、

CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);

をやるもダメ・・・
それも当たり前で、デストラクタが
呼び出されるタイミングって曖昧なんだよね^^;

void CCTest::onEnter()
{
	CCNode::onEnter();
	
	// タッチを有効
	CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this, 0);
}

void CCTest::onExit()
{
	// タッチを解除
	CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
	
	CCNode::onExit();
}

とonEnter()、onExit()のタイミングでやるのが正解っぽい。
変な落ち方するから、なかなか原因が分かるまで大変だった・・・

と、慣れない環境だけに地味にハマることが多々^^;

で、その案件の現状は、ようやく一通り実装し終えて、
細かい調整やらを明日中にしてやれば完成な気がする・・・!
ギリギリ金曜には間に合いそう・・・!!

じゃ、少しゲームして、作業も進めて寝るー
バイニー☆

test?

コメントを残す