2012-05-04 8 views
2

こんにちは、私は、ターゲットスプライトcocos2d :: CCmoveTO

// addtargetで()一部の発射運動をしようとしています

........プログラミングcocos2dxに新しいです

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ループ外、それはしかし、すべて正常に動作 (時間、速度、空間座標T、X、Y、VX、VYを有する)構造体Pを返す関数である場合それはdoesnの内部何も表示しない デバッグが完了し、すべての座標が正常である NULLを削除しようとしました 最後にベジェを使用しているため、部分的に機能します。 CCMoveToがなぜ機能しないのか理解できません。それは常に(60,60)の最初の座標を示した0​​&また、モバイルゲームプログラミングの新しい人のためのココス2dxのためのいくつかの良いチュートリアルのリンク。ありがとう!

答えて

1

同じターゲット上で複数のMoveToアクションを実行することが意味をなさないとは必ずしも言えません。確かに、あなたは同時に同じ場所に移動して別の場所に移動すると言っていますが、これは信頼できる結果をもたらすことはできません。

MoveByを使用すると、インクリメンタルディスプレースメントを指定することができますが、ターゲットの軌跡に沿って目標を設定することが望ましい場合は、コードのロジックを再作成する必要があります。この場合、実行する必要があるすべてのアクションを含む大きなシーケンスを作成することができます。例えば。 (擬似コードで):そうシーケンスこのことができますHopw

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); 
+0

私はそれらを同じ時間に動かしていません......私はここの期間。しかし、私はウルポイントを得た..私は私のロジックを修正しました。 thnx ...私はまた、whileループの中の前のケースでどのように遅延するかを知る必要があります。そしてあなたの方法も働いた。 thnxトン。 –

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; 
} 

チェック.. :)

+0

申し訳ありませんが動作しません、私はまた、スプライト移動の部分を削除して終了:関数呼び出し。 –

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));