gpt4 book ai didi

memory - 如何同时对多个 Sprite 执行操作

转载 作者:行者123 更新时间:2023-12-05 01:29:43 24 4
gpt4 key购买 nike

我是 cocos2d 的新手。我正在写我的第一个应用程序。但是我有一个问题我无法解决。问题是,当我移动多个 Sprite 时,除了最后一个 Sprite 外,其他 Sprite 都可以。我希望我的 Sprite 会同时运行 Action 。但我不知道如何解决它。关于推广我的代码的任何想法或建议。谢谢。

这是我的代码。

-(void) setHeadFace:(Face *)headFace moveFrom:(CGPoint)startPosition moveTo:(CGPoint)endPosition`

{

CCMoveTo *moveOut = [CCMoveTo actionWithDuration:0.2f position:startPosition];
CCScaleTo *scaleTo = [CCScaleTo actionWithDuration:0.2f scale:0.0f];
CCSpawn *moveFrom = [CCSpawn actions:moveOut,scaleTo,nil];

CCMoveTo *moveTo = [CCMoveTo actionWithDuration:0.0f position:endPosition];

CCSequence *headAction = [CCSequence actions:moveFrom,moveTo,nil];
[headFace.faceSprite runAction:headAction];
}

-(void) setMidlFace:(Face *)curtFace moveTo:(CGPoint)movePosition nextFace:(Face *)nextFace

{

CCMoveTo *moveTo = [CCMoveTo actionWithDuration:0.2f position:movePosition];

CCSequence *moveAction = [CCSequence actions:moveTo,nil];
[curtFace.faceSprite runAction:moveAction];

nextFace.faceSprite = curtFace.faceSprite;
nextFace.faceType = curtFace.faceType;
[nextFace.faceSprite setPosition:movePosition];
}

-(void) setTailFace:(Face *)tailFace moveTo:(CGPoint)movePosition
byGuardSprite:(CCSprite *)guardSprite`
{

CCDelayTime *delay = [CCDelayTime actionWithDuration:0.2f];
CCMoveTo *moveIn = [CCMoveTo actionWithDuration:0.2f position:movePosition];
CCScaleTo *scaleTo = [CCScaleTo actionWithDuration:0.2f scale:1.0f];
CCSpawn *moveTo = [CCSpawn actions:moveIn,scaleTo,nil];

CCCallBlock *touchBlock =[CCCallBlock actionWithBlock:^{
tailFace.faceSprite = guardSprite;
tailFace.faceType = guardSprite.tag;
tailFace.faceSprite.tag = -1;

isTouch = YES;
}];

CCSequence *tailAction=[CCSequence actions:delay,moveTo,touchBlock,nil];
[guardSprite runAction:tailAction];
}

-(void) moveFaces:(Face *)face direction:(int)direction`

{

CCSprite *guardSprite = nil;

CGPoint movePosition;
CGPoint curtPosition;
CGPoint startPosition;
CGPoint endPosition;

int x = face.cdX;
int y = face.cdY;

CGFloat width = faceGrid[x][0].position.x;
CGFloat height = faceGrid[0][y].position.y;

switch (direction) {
case MOVE_DOWN:
CCLOG(@"move down:direction %d", direction);

movePosition = CGPointMake(width,faceGrid[x][0].position.y);

//move the first face out of the grid
startPosition = CGPointMake(width,faceGrid[x][0].position.y-GRID_OFFSET.y/2);
endPosition = CGPointMake(width,faceGrid[x][GRID_HEIGHT-1].position.y+GRID_OFFSET.y/2);

[self setHeadFace:faceGrid[x][0] moveFrom:startPosition moveTo:endPosition];

guardSprite = faceGrid[x][0].faceSprite;
guardSprite.tag = faceGrid[x][0].faceType;

for (int j=1; j<GRID_HEIGHT; j++)
{
curtPosition=CGPointMake(width,faceGrid[x][j].position.y);

//move the middle face to the next face
[self setMidlFace:faceGrid[x][j] moveTo:movePosition nextFace:faceGrid[x][j-1]];

movePosition = curtPosition;
}

//use the guard face to set the last face's move action
[self setTailFace:faceGrid[x][GRID_HEIGHT-1] moveTo:movePosition byGuardSprite:guardSprite];

break;
......
}

最佳答案

出于同样的目的,我使用了 tick 函数。

-(void)onEnter
{
[super onEnter];

self.isTouchEnabled = true;

[self schedule: @selector(tick:)];
}


-(void) tick: (ccTime) dt
{
CGPoint pos = head.position ;

head.position = ccp(pos.x+gameSpeed, pos.y);

pos = tail.position ;
tail.position = ccp(pos.x+gameSpeed, pos.y);

}

关于memory - 如何同时对多个 Sprite 执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13220037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com