在SpriteKit中,我可以将一些SKAction排队并行运行,其他SKActions按顺序运行吗?

时间:2014-04-24 15:07:07

标签: objective-c macos sprite-kit

我有一个从A点移动到B的精灵。移动可能导致精灵绕过一个物体,这意味着精灵会从面向西,从北到东。

我将当前面向的方向存储在_facing中。我使用A *寻路算法来构建NSArray CGPoints。然后我将精灵走过点,同时将纹理从静态(静止不动)纹理更改为动画纹理。最终,这将变得更加复杂,因为精灵"转向"从方向到方向,但在我学习Objective-C / SpriteKit时,我试图保持简单。

无论如何,问题是我需要在点击这些点时从西/北/东行走更改动画,但是当我排队SKAction个对象时,它们当然按顺序运行,这意味着当&#34;西&#34;动画正在播放精灵根本不动。如何将SKAction与另一个SKAction序列并行运行?// Set direction facing. if (curCGPoint.x > prevCGPoint.x && [_facing isEqualToString:@"left"]) { [self setDirectionFacing:@"right"]; // Add action to change direction. SKAction *changeDir = [SKAction repeatActionForever:[SKAction animateWithTextures:walkRightFrames timePerFrame:0.1f resize:NO restore:YES]]; [walkActions addObject:changeDir]; } else if (curCGPoint.x < prevCGPoint.x && [_facing isEqualToString:@"right"]) { [self setDirectionFacing:@"left"]; // Add action to change direction. SKAction *changeDir = [SKAction repeatActionForever:[SKAction animateWithTextures:walkLeftFrames timePerFrame:0.1f resize:NO restore:YES]]; [walkActions addObject:changeDir]; } // Build SKAction to walk hero to the current point. SKAction *walkAction = [SKAction moveTo:curCGPoint duration:0.1]; // Add to our array of walk SKAction's. [walkActions addObject:walkAction]; &#39}使用块是一种潜在的解决方案吗?

这里是我检查&#34;转&#34;的代码。正在发生在给定的点并做出相应的反应:

for()

之前的代码位于SKAction *sequence = [SKAction sequence:walkActions]; [_sprite runAction:sequence withKey:@"Move_Hero"]; 中,我遍历所有点 - 后来我做了类似的事情来实际执行操作:

SKAction:runBlock

更新:对于那些试图做同样事情的人,你可以使用SKAction序列,SKAction组和块(通过SKAction:runBlock)的组合来获得你的并行和连续的行动。使用{{1}},您可以触发特定&#34;群组&#34;只应在该特定时刻运行但不应阻止连续操作的条目。这是一条非常灵活的路线。

1 个答案:

答案 0 :(得分:5)

是SKAction有一个名为group:

的方法
[SKAction group:@[SKAction1, SKAction2, SKAction3]];

它的运行方式与序列类似,但组数组中的所有SKAction都在一起运行。

有关详细信息,我建议您阅读docs