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