2

こんにちは、cocos2dx プログラミングは初めてです........

ターゲットスプライトの発射モーションを作ろうとしています

// addtarget() 部分で

int i(0);
while(i<20)
{
p=HelloWorld::nextPoint(p,0.5);//p is a struct see below.

cocos2d::CCFiniteTimeAction* actionMove=cocos2d::CCMoveTo::actionWithDuration(1.0, ccp(p.x,p.y));
target->runAction( cocos2d::CCSequence::actions(actionMove,NULL));
++i;
}
cocos2d::CCFiniteTimeAction* actionMoveDone = cocos2d::CCCallFuncN::actionWithTarget( this,callfuncN_selector(HelloWorld::spriteMoveFinished));

target->runAction( cocos2d::CCSequence::actions(actionMoveDone, NULL) );

nextPoint は、構造体 p (時間、速度、および空間座標 t、x、y、vx、vy を持つ) を返す関数です。ループの外側ではすべて正常に実行されますが、内側ではデバッグが行われず、すべての座標が表示されません。大丈夫です NUllを削除しようとしました できません 最終的にベジエを使用したので、部分的に機能するようになりました。しかし、なぜ CCMoveTo が機能しないのか理解できません。常に (60,60) の初期座標と、モバイル ゲーム プログラミングが初めての人向けの cocos 2dx の優れたチュートリアル リンクが表示されました。ありがとう!

4

3 に答える 3

2

このコードを使用...

while(i<20)
{
p=HelloWorld::nextPoint(p,0.5);//p is a struct see below.

cocos2d::CCFiniteTimeAction* actionMove=cocos2d::CCMoveTo::actionWithDuration(1.0, ccp(p.x,p.y));
cocos2d::CCFiniteTimeAction* actionMoveDone = cocos2d::CCCallFuncN::actionWithTarget( this,callfuncN_selector(HelloWorld::spriteMoveFinished));

target->runAction( cocos2d::CCSequence::actions(actionMove,actionMoveDone,NULL));
++i;
}

構文を確認してください..これが役立ちます.. :)

于 2012-05-04T09:03:18.683 に答える
1

CCSequence::actionsWithArrayなので、シーケンス 20 MoveTo と callfunc の後に

CCArray * arr = CCArray::arrayWithCapacity(20);
for(int i = 0; i != 20; i++)
{
    p = HelloWorld::nextPoint(p,0.5);
    arr->addObject(CCMoveTo::actionWithDuration(1.0, ccp(p.x,p.y)));
}

CCFiniteTimeAction * actionMoveDone 
= CCCallFuncN::actionWithTarget(this,callfuncN_selector(HelloWorld::spriteMoveFinished));
target->runAction(CCSequence::actions(CCSequence::actionsWithArray(arr), actionMoveDone, NULL));
于 2012-07-11T09:50:46.277 に答える
1

MoveTo同じターゲットで複数のアクションを実行する意味があるかどうかは完全にはわかりません。確かに、あなたは同じターゲットに対して同時に異なる場所に移動するように言っていますが、これは信頼できる結果を生み出すことはできません.

増分変位を指定するを使用して試すこともできMoveByますが、ターゲットが特定の軌跡をたどることが必要な場合は、おそらくコードのロジックを作り直す必要があります。この場合、MoveTo実行する必要があるすべてのアクションを含む、より大きなシーケンスを作成できます。例 (疑似コード):

 cocos2d::CCSequence* actionSequence = <create empty sequence>;
 while(i<20)
 {
     p = HelloWorld::nextPoint(p,0.5);
     cocos2d::CCFiniteTimeAction* actionMove = ...
     <add actionMove to actionSequence>
     ++i;
 }

 target->runAction(actionSequence);
于 2012-05-04T07:45:48.327 に答える