cocos2d-x タッチイベント取得
概要
- タッチイベントを取得してゲーム中で使用する
参考
- タッチイベント関連のリファレンス(ccTouchで検索)
ブランチ「develop/multi-scene-stack」をベースにする
- 前回サンプルに追加実装した
タッチイベントコールバックをオーバーライド
- cocos2d-xのクラスリファレンスを見るとタッチイベント用関数の仮想関数があるのでそれをアプリ用ヘッダでも宣言する
void registerWithTouchDispatcher(); bool ccTouchBegan( cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent ); void ccTouchEnded( cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent );
タッチイベント実装
- cpp側でオーバーライドした関数の実装を行う
- http://dummyimage.com/ で画像つくってボタンを押したら画像がかわるようにする
- CCSpriteのオブジェクトをメンバ変数で保持してるようにしているが省略
bool Title::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) { this->mSprite->initWithFile("background_touch_began.png"); return true; } void Title::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent) { this->mSprite->initWithFile("background_touch_end.png"); }
タッチイベントをとるオブジェクトの設定
- イベントを検出するオブジェクトとして設定する必要がある
- タッチイベントを処理するオブジェクトを設定する必要があるが公式のリファレンスの呼び方ができなくなってる
- priorityが設定できるがサンプルのままの値を設定したらCCMenuのボタンがイベントをとれなくなったので注意
- CCMenuはデフォルトではpriorityが-128で設定されるようだが、これより大きい数を設定したらCCMenuが優先されるようになった
void Title::registerWithTouchDispatcher() { //CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,-129,true); CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,-127,true); }
タッチイベントの有効化
- デフォルトでも有効かもしれないが一応initの中で呼んどく
// enable touch event this->setTouchEnabled(true);