我确定这是一个线程问题,但我无法弄清楚。 我想让精灵淡化并重新出现在其他地方。我可以让它以一种方式工作,而不是另一种方式(见下文)我想要的顺序是:
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函数放在我正在进行排序的上方,它也没有做任何事情。非常感谢。
答案 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动作。