objective-c - 在 SpriteKit 中,我可以将一些 SKActions 排队并行运行,而另一些则按顺序运行吗?

标签 objective-c macos sprite-kit

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

我将当前朝向存储在 _facing 中。我使用 A* 寻路算法构建一个 CGPointsNSArray。然后我让 Sprite 穿过这些点,同时将纹理从静态(静止不动)纹理更改为动画纹理。最终这将变得更加复杂,因为 Sprite 从一个方向“转向”另一个方向,但在我学习 Objective-C/SpriteKit 的同时,我试图保持简单。

无论如何,问题是当这些点被击中时,我需要改变向西/向北/向东行走的动画,但是当我排队 SKAction 对象时,它们当然会按顺序运行,这意味着当“西部”动画正在播放时, Sprite 根本没有移动。我怎样才能让一些 SKAction 与另一个 SKAction 序列并行运行?使用 block 是一种潜在的解决方案吗?

这是我检查给定点是否发生“转弯”并做出相应响应的代码:

// 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];

之前的代码在 for() 中,我在其中遍历了所有点——随后我做了类似这样的事情来实际运行操作:

SKAction *sequence = [SKAction sequence:walkActions];
[_sprite runAction:sequence withKey:@"Move_Hero"];

更新:对于那些试图做同样事情的人,您可以结合使用 SKAction 序列、SKAction 组和 block (通过 SKAction:runBlock) 让你的平行和连续的行动继续下去。使用 SKAction:runBlock,您可以从特定“组”条目中触发操作,这些条目只应在特定时刻运行,但不应阻止后续操作。这是一条非常灵活的路线。

最佳答案

是的,SKAction 有一个名为 group: 的方法

[SKAction group:@[SKAction1, SKAction2, SKAction3]];

它的运行很像序列,但组数组中的所有 SKAction 一起运行。

有关更多详细信息,我建议阅读 docs .

关于objective-c - 在 SpriteKit 中,我可以将一些 SKActions 排队并行运行,而另一些则按顺序运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23272803/

相关文章:

macos - OSX 上的 Delphi XE6 ARC 释放变量

Java/AWT/Swing : how to distinguish the pressed enter or return key

cocoa - CGEventTapCreate 神秘崩溃并出现 "key down"事件

ios - 向 SKSpriteNode 施加脉冲以赋予其随机方向

ios - 如何在SimCity 5中实现建筑物移动时摇摆的物理效果?

iphone - 如何以编程方式选择 map 图钉

iphone - 如何交换 NSMutableArray 中的值?

ios - 如何在 SpriteKit 中高效地画一条线

iPhone MapView 获取路线

objective-c - 透明 NSWindow 但具有标准边框和阴影