我正在开发一个游戏,其中当触摸屏幕(在touchesBegan内部)时,标签应该反弹到屏幕中(仅一次)。
我发现this扩展名有助于“弹跳”,但我不知道在3秒钟(持续时间?!?!)前触摸restartButton(此按钮可以正常工作)时,会出现myLabel的情况没有任何动画。我做错什么了吗?
ps:restartButton具有removeAllActions()。因此,即使该动画处于循环中(我想不是),它也会被停止,不是吗?
//myLabel
myLabel.position = CGPoint(x: self.frame.width / 2, y: self.frame.height)
myLabel.text = "0"
self.addChild(myLabel)
//bounces into screen (using Sprite-Kit Spring)
self. myLabel.runAction(SKAction.moveTo(CGPoint(x: self.frame.width / 2, y: self.frame.height / 1.125), duration: 3.0, delay: 0.5, usingSpringWithDamping: 0.2, initialSpringVelocity: 0.0))
当触摸restartButton时,它将调用此函数:
func restartScene(){
self.removeAllChildren()
self.removeAllActions()
gameStarted = false
createScene()
}
附言:
createScene()
是实际的游戏场景(位置,比例,物理等事物)。 最佳答案
在Sprite Kit中工作时,请注意SKScene是SKNode的成员。调用removeAllActions
仅删除应用于屏幕的操作,而调用removeAllChildren
仅删除子级,而不删除操作。
您需要给所有孩子打电话给removeAllActions
,让他们停止活动。
如果要为场景提供一种删除所有子动作的方法,请在SKNode
上设置扩展名。
extension SKNode
{
func removeAllActionsIncludingChildren()
{
self.removeAllActions()
self.children.map { $0.removeAllActionsIncludingChildren()}
}
}
关于ios - Sprite Kit中的弹跳标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36389977/