我已创建此代码块以创建动画以使选择可见。在touchesBegan中调用。
private func setSelectionAnim(atPoint point:CGPoint) {
selectAnim.removeActionForKey(ANIM_SELECT)
let action = SKAction.repeatActionForever( SKAction.animateWithTextures(WBTextures.Select(), timePerFrame: 0.33))
selectAnim.position = point
selectAnim.runAction(action, withKey: ANIM_SELECT)
}
WBTextures.Select()
是TexturePacker生成的类的实例,selecAnim
是SKNode()
实例化的,并作为子项添加到init中的GameScene。
但如果我使用以下代码取消动画(当选择目标时):
private func stopSelectionAnim()
{
selectAnim.removeActionForKey(ANIM_SELECT)
}
问题是:当我呼叫stopSelectAnim()
时,最后呈现的纹理在屏幕上保持可见。在搜索SpriteKit编程指南之后
取消正在运行的操作要取消节点正在运行的操作, 调用它的removeAllActions方法。所有操作都将从中删除 节点立即。如果删除的操作有持续时间,则 会对其进行更改 已经对节点保持完整 ,但进一步的更改不是 执行。
会有所期待。之后添加了行selectAnim.removeFromParent()
,现在工件消失了。但现在出现的问题是下次setSelectionAnim(atPoint point:CGPoint)
被调用时没有任何反应。逻辑如果我删除了节点,但没有得到运行时错误,所以' selectAnim'不是零。为什么要添加额外的行,解决问题并介绍下一个。
什么是中断动画并仍然能够启用动画的最佳做法。
我想出了一些我真正喜欢并且不适合我的场景设置的想法。
addChild' the
selecAnim in the beginning of each call to
setSelectionAnim(atPoint point:CGPoint)`runBlock()
创建一个动作序列,检查Bool是否要停止,如果是,我如何在块中停止动画SKNode
并将其作为子项添加到selecAnim
节点。 (我已尝试过这个,但动画根本没有显示,请看代码:
selectAnim.removeActionForKey(ANIM_SELECT)
let node = SKNode()
let action = SKAction.repeatActionForever(SKAction.animateWithTextures(WBTextures.Select(),timePerFrame:0.33))
node.position = point
node.runAction(action,withKey:ANIM_SELECT)
selecAnim.addChild(节点)我是否会错过这个简单的解决方案,或者一个是最好的解决方案,或者做其中一个,请找一个更好的解决方案。