2012-08-30 3 views
1

반복 가능한 동작 순서 (CCMoveBy, CCMoveTo)를 만들어야하지만 임의의 매개 변수 (위치, 지속 시간)를 사용해야합니다. 그 PARAMS 외부 변수 (요인)에 따라,CCSequence와 함께 사용되는 CCCallFuncN의 동작

-(void) randomizeVec 

및 사실

-(void) calcTiltDuration 

: 나는이 방법을 썼다. 내가 그런 일을 수행 할 수 없습니다

-(void) moveRandomVector:(CCNode*) node 
{ 
    int dx = rand_between(-1, 2) * mShakeFactor *2 ; 
    int dy = rand_between(-1, 2) * mShakeFactor *2; 
    CCMoveBy* action = [CCMoveBy actionWithDuration:0.1/mShakeFactor position:CGPointMake(dx, dy)]; 
    CCMoveTo* action2 = [CCMoveTo actionWithDuration:0.1/mShakeFactor position:initialTowerNodePos]; 
    CCEaseInOut* easyTilt = [CCEaseInOut actionWithAction:action rate:0.1]; 
    CCEaseInOut* easyRestore = [CCEaseInOut actionWithAction:action2 rate:0.1]; 
    CCSequence* seq = [CCSequence actions:easyTilt,easyRestore , nil]; 
    [node runAction:seq]; 
} 

CCCallFuncN를 통해 호출됩니다 값이 한 번에 복사되고 randomizeVec 및 calcTiltDuration이 행동에 영향을 미치지 않기 때문에, 그래서 방법을 썼다

id randomize = [CCCallFuncN actionWithTarget:self selector:@selector(randomizeVec)]; 
id calcTilt = [CCCallFuncN actionWithTarget:self selector:@selector(calcTiltDuration)]; 
CCMoveBy* tilt = [CCMoveBy actionWithDuration:mTIltDuration position:randomVec]; 
CCMoveTo* restore = [CCMoveTo actionWithDuration:mTIltDuration position:initialTowerNodePos]; 
CCDelayTime* wait = [CCDelayTime actionWithDuration:0.1]; 
CCSequence* seq = [CCSequence actions:wait,calcTilt,randomize, tilt, restore, nil]; 
[aNode runAction:[CCRepeatForever actionWithAction:seq]]; 

:

id action = [CCCallFuncN actionWithTarget:self selector:@selector(moveRandomVector:)]; 
CCSequence* sq = [CCSequence actionOne:action two:[CCDelayTime actionWithDuration:0.1]]; 
[towerNode runAction:[CCRepeatForever actionWithAction:sq]]; 

외부 요인에서 요인이 변경됩니다 (mShakeFactor).

적절한 접근 방법이 있습니까? 나는 Cocos2d 전문가가 아니므로 CCCallFuncN을 사용하여 시퀀스를 실행하는 액션이 ​​중지되지만 CCMove * 액션과 moveRandomVector의 다른 액션은 상황에 대해 걱정합니다. 어쩌면 내가 구현할 수있는 다른 접근법을 알 수 있을까요?

답변

0

마지막으로 작업을 시작하는 코드를 업데이트 메서드로 옮겼습니다. 업데이트가 호출 될 때마다 액션 시퀀스 (Boolean 변수)를 실행할 수 있는지 확인합니다. 변수를 실행 한 다음 변수를 NO로 설정할 수 있지만 시퀀스의 마지막 동작 이후에 시퀀스를 다시 실행할 수 있는지 확인하는 메서드를 호출합니다. 그것은 동작에 영향을 미치는 변수 (CCMoveBy, CCMoveTo)를 변경할 수 있고 CCRepeatForever와 유사하기 때문에 편안합니다.

관련 문제