[`cocos2dx`] `CCNode` 以外のオブジェクトのスケジュールを実行させる

CCSchedulerCCActionManager などに渡すオブジェクトは SelectorProtocol を継承しているクラスでなければならないので、これを継承したクラスを作成する。CCScheduler#scheduleUpdateForTarget でオブジェクトを登録 すると、登録したオブジェクトの SelectorProtocol#update メソッドがフレーム毎に呼ばれる。

  class Test : public CCObject, public SelectorProtocol {
    void update(ccTime dt) {

      static int count = 0;      
      CCLOG("テストコメント(%d)", count++);
      ++count;
      if ( count == 10 ) {
        CCScheduler *s = CCScheduler::sharedScheduler();
        s->unscheduleUpdateForTarget(this);
      }
    }
  };

  CCScheduler *s = CCScheduler::sharedScheduler();
  s->scheduleUpdateForTarget(new Test, 0, false);

こんな感じのコードをかくと、フレーム毎にコンソールにログテキストが表示される。

CCNodescheduleUpdate メソッドも scheduleUpdateForTarget によって update メソッドを登録している。

※このコードはメモリリークしてしまう。実際に使うときはオブジェクトをどっかに保持して、適切なタイミングで解放する必要がある。

Share