반복 가능한 동작 순서 (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의 다른 액션은 상황에 대해 걱정합니다. 어쩌면 내가 구현할 수있는 다른 접근법을 알 수 있을까요?