2

とてもシンプルなスケジュールコードです。AMS_Moving 継承された CCNode。

スケジュールで電話しaction()ます。runAction()しかし、呼び出しませんaction()

action() を直接呼び出すと、正常です。

理由が知りたいです。私を助けてください。

void AMS_Moving::runAction()
{
..
..
    this->schedule(schedule_selector(AMS_Moving::action));
}

void AMS_Moving::action(ccTime dt)
{
..
}
4

6 に答える 6

3

このコードを試してください:

CCDirector::sharedDirector()->getScheduler()->scheduleSelector(schedule_selector(AMS_Moving::action),this,1.0f,false);
于 2013-12-24T06:27:19.390 に答える
1

解決策 1:

CCDirector::sharedDirector()->getScheduler()->scheduleSelector(schedule_selector(Foo::Updater),this,2.0f,false);

このソリューションの興味深い利点の 1 つは、スケジューラーがゲーム中のシーンの置き換えとは無関係に機能することです。のオブジェクトに追加するのではなく、retain後で削除する必要があります。FooCCLayerCCScene

解決策 2:

  • メンバー関数に次の署名を使用します。void Foo::Updater(float dt)
  • これを関数のどこかで呼び出して、Fooスケジューラを開始しますthis->schedule(schedule_selector(Foo::Updater),2.0f);
  • この場合、スケジューラに実際に関数を呼び出させるために、クラスのオブジェクトをいくつかにする必要があります。addChild()FooCCLayerUpdater

--

推定:

  1. Cocos2dx v2.2.3
  2. Fooスケジューラを実行しようとしているクラスです。
于 2014-05-27T09:22:05.663 に答える
1

AMS_Moving::runAction() が呼び出されているか、または CCNode::runAction() が呼び出されていますか? cocos2d-x と同じ関数名を使用しないようにして、何が起こるかを確認してください。

于 2012-09-13T00:22:32.757 に答える
0

関数 'AMS_Moving::action()' にブレークポイントを設定してみてください。このコードは明らかに「アクション」を呼び出します。

于 2012-09-12T10:16:32.217 に答える