2012-05-04 3 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를 반환하는 함수이다 때 '케이 안쪽 t 쇼 무엇이든 디버깅이 끝났으며 모든 좌표가 괜찮습니다. NULL을 (를) 삭제하려고 시도했습니다. 마지막으로 베 지어를 사용하여 부분적으로 작동합니다. 그러나 CCMoveTo가 작동하지 않는 이유를 이해할 수 없습니다. 그것은 항상 (60,60) &의 초기 좌표를 보여 주었고, 모바일 게임 프로그래밍에 익숙하지 않은 사람들을위한 코코스 2dx에 대한 좋은 자습서 링크를 제공합니다. 감사!

답변

1

동일한 대상에서 여러 개의 MoveTo 작업을 실행하는 것이 합리적이라고 확신하지 않습니다. 실제로 동일한 위치에서 동시에 다른 위치로 이동한다고 말하면 신뢰할만한 결과를 얻을 수 없습니다.

증분 변위를 지정하는 MoveBy을 사용해 볼 수도 있지만, 원하는 대상이 주어진 궤적을 따르는 경우 코드의 논리를 다시 작성해야합니다. 이 경우 실행해야하는 모든 MoveTo 작업을 포함하는 더 큰 시퀀스를 만들 수 있습니다. 예 : (의사 코드) : 그래서 순서이 도움이 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

나는 같은 시간에 그들을 움직이지 않을거야 ...... 나는 여기서 기간. 하지만 나는 UR 포인트를 얻었 어. 나는 내 논리를 수정했다. 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));