[`cocos2dx`] `CCTouchDispatcher` にタッチを受け取るクラスを登録する

タッチした時に ccTouchBegan などのメソッドがコールされるけど、これは CCTouchDelegate のサブクラスである CCTargetedTouchDelegate またはCCStandardTouchDelegate を継承しているクラスのうち CCTouchDispatcher シングルトンに登録されているオブジェクトのメソッドがコールされている。

CCTouchDispatcher#addTargetedDelegate メソッドで登録できる。addTargetedDelegate の第2引数は タッチ時にコールするオブジェクトの優先度を設定するもの。数値が小さいものから順に実行される。

ということで、以下のようなコードを実行して画面にタッチすると "Touched!" とコンソールに表示される。

  class TouchTest : public CCTouchDelegate {
  public:
    TouchTest() {
      CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, 0, true);
    }
    ~TouchTest() {
      CCTouchDispatcher::sharedDispatcher()->removeDelegate(this);
    }
    virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) {
      CCLog("Touched!");
      return true;
    };
  };  
  TouchTest *test = new TouchTest;  

CCTouchDelegate を継承しても動作するんだけどたぶんよろしくないかと。。シングルタッチを扱う場合は CCTargetedTouchDelegate を継承する。一度に複数のタッチを受け取りたい場合は CCStandardTouchDeleaget を継承する。

Share
関連記事