发出特定SKAction以按顺序发射的问题

时间:2016-03-02 00:16:12

标签: swift sprite-kit swift2 skaction

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

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

我的一个类提供动画变形的实现细节(遵循我创建的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]))

这完全没问题。一切都好。

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

在尝试使用fadeInWithDuration方法重新显示之前,您可能需要使用fadeOutWithDuration来使节点消失。

因此,请确保myNode具有alpha< 1.0如果你想应用fadeIn动作。