问题是按顺序触发特定的 SKAction

Issue having a particular SKAction to fire in a sequence

我确定这是线程问题,但我无法弄清楚。 我想让精灵淡出并重新出现在其他地方。我可以让它以一种方式工作,但不能以另一种方式工作(见下文)我想要的顺序是:

fade, x, y, z  (all are SKActions)

我的一个 classes 提供了动画中 warp 的实现细节(遵循我创建的 Warpable 协议)

protocol Warpable
{
    func warpOutAnimation() -> SKAction
}

//and then elsewhere, in my actual class:
func warpOutAnimation() -> SKAction
    {
      return SKAction.fadeInWithDuration(1.0)
    }

所以这是我在游戏中的顺序:

 myNode.runAction(SKAction.sequence([SKAction.fadeInWithDuration(1.0), x, y, z]))

这 运行 非常好。一切顺利。

现在,如果我想从 class 获取 warp 实现(因为这是来自工厂的动态 class 我有):

 myNode.runAction(SKAction.sequence([
(self.currentMonster as! Warpable).warpOutAnimation(), x, y, z]))

这个序列执行warpOutAnimation(尽管它返回一个SKAction)但它仍然触发x、y、z。

currentMonster 是根据我游戏中的某些上下文从工厂实例化的。我在那里有一个断点,它确实触发了协议的功能,但 SKAction 不是 运行.

知道为什么会发生这种情况吗?即使我将 warp 函数放在我进行排序的正上方,它也不会做任何事情。非常感谢。

此函数似乎缺少 return 语句。它不会编译,所以我认为您的示例代码中缺少某些内容。

func warpOutAnimation() -> SKAction
{
   SKAction.fadeInWithDuration(1.0)
}

根据文档,fadeInWithDuration 操作将节点的 alpha 属性 从其当前值更改为 1.0。

如果节点的 alpha 值已经是 1.0,则此操作无效,这可能是您的问题。

您可能想要的是,使用 fadeOutWithDuration 使节点消失,然后再尝试使用 fadeInWithDuration 方法使其重新出现。

因此,如果您想应用淡入效果,请确保 myNode 的 alpha < 1.0。