如何在 Spritekit 中创建一个 SKActions 数组

How to create an array of SKActions in Spritekit

我正在尝试使用 objective-c 在 Spritekit 中创建一个 SKActions 数组,以便两个数组并行执行。 "rotation" 不是一个适合我的数组,除非它引起了我怀疑是这里问题的问题。我对这段代码的期望是,actionMove 和旋转将 运行 并行,然后它继续移动到 actionMove1 和 actionMove2 并完成 运行Action。我在下面显示的最后一行代码中收到以下错误(仅添加了所需的代码部分)。

'SKAction *__strong [3]' 类型的集合元素不是 Objective-C 对象

SKAction * actionMove = [SKAction moveTo:CGPointMake(actualX2, actualY2) duration:actualDuration];
SKAction * actionMove1 = [SKAction moveTo:CGPointMake(actualX3, actualY3) duration:actualDuration];
SKAction * actionMove2 = [SKAction moveTo:CGPointMake(actualX4, actualY4) duration:actualDuration];
int rotate = arc4random() % 5;
SKAction * rotation = [SKAction rotateByAngle:M_PI/rotate duration:0.5];

SKAction * moveArray[] = {actionMove, actionMove1, actionMove2};

[game_piece1 runAction:[SKAction group:@[moveArray, rotation]]];

我相信您想要的是 group: 和 sequence: 操作的组合。组将 运行 在一起,顺序将等到上一个动作完成。

SKAction * actionMove = [SKAction moveTo:CGPointMake(actualX2, actualY2) duration:actualDuration];
SKAction * actionMove1 = [SKAction moveTo:CGPointMake(actualX3, actualY3) duration:actualDuration];
SKAction * actionMove2 = [SKAction moveTo:CGPointMake(actualX4, actualY4) duration:actualDuration];
int rotate = arc4random() % 5;
SKAction * rotation = [SKAction rotateByAngle:M_PI/rotate duration:0.5];

SKAction *firstStep = [SKAction group:@[actionMove, rotation]];
SKAction *sequence = [SKAction sequence:@[firstStep, actionMove1, actionMove2]];

[game_piece1 runAction:sequence];

您可能会发现此 link 有用 Adding Actions to Nodes 它可以很好地显示不同的组和序列。

希望这会给你想要的结果。

编辑

如果您希望 运行 旋转,同时 运行 顺序移动动作,它看起来像这样。

SKAction * actionMove = [SKAction moveTo:CGPointMake(actualX2, actualY2) duration:actualDuration];
SKAction * actionMove1 = [SKAction moveTo:CGPointMake(actualX3, actualY3) duration:actualDuration];
SKAction * actionMove2 = [SKAction moveTo:CGPointMake(actualX4, actualY4) duration:actualDuration];
int rotate = arc4random() % 5;
SKAction * rotation = [SKAction rotateByAngle:M_PI/rotate duration:0.5];

SKAction *sequence = [SKAction sequence:@[actionMove, actionMove1, actionMove2]];
SKAction *group = [SKAction group:@[sequence, rotation]];

[game_piece1 runAction:group];