如何在不在屏幕上留下(不需要的)剩余纹理的情况下取消SpriteKit动画

时间:2015-01-12 17:43:31

标签: ios animation swift sprite-kit skaction

我已创建此代码块以创建动画以使选择可见。在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生成的类的实例,selecAnimSKNode()实例化的,并作为子项添加到init中的GameScene。

但如果我使用以下代码取消动画(当选择目标时):

 private func stopSelectionAnim()
{
    selectAnim.removeActionForKey(ANIM_SELECT)
}

问题是:当我呼叫stopSelectAnim()时,最后呈现的纹理在屏幕上保持可见。在搜索SpriteKit编程指南之后

  

取消正在运行的操作要取消节点正在运行的操作,   调用它的removeAllActions方法。所有操作都将从中删除   节点立即。如果删除的操作有持续时间,则 会对其进行更改   已经对节点保持完整 ,但进一步的更改不是   执行。

会有所期待。之后添加了行selectAnim.removeFromParent(),现在工件消失了。但现在出现的问题是下次setSelectionAnim(atPoint point:CGPoint)被调用时没有任何反应。逻辑如果我删除了节点,但没有得到运行时错误,所以' selectAnim'不是零。为什么要添加额外的行,解决问题并介绍下一个。  什么是中断动画并仍然能够启用动画的最佳做法。

我想出了一些我真正喜欢并且不适合我的场景设置的想法。

  1. 重新实例化addChild' the selecAnim in the beginning of each call to setSelectionAnim(atPoint point:CGPoint)`
  2. 使用runBlock()创建一个动作序列,检查Bool是否要停止,如果是,我如何在块中停止动画
  3. 将动画添加到新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(节点)
  4. 我是否会错过这个简单的解决方案,或者一个是最好的解决方案,或者做其中一个,请找一个更好的解决方案。

0 个答案:

没有答案