我正在构建一个游戏,当触摸屏幕时,标签应该反弹到屏幕上(只有一次)(它位于touchesBegan内)。
我发现this扩展程序有助于"弹跳"但我不知道当我触摸restartButton(此按钮工作正常)之前会发生什么 3秒(持续时间' s时间?!?!), 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()
}
Ps:createScene()
是实际的游戏场景(诸如位置,音阶,物理等等)。
答案 0 :(得分:1)
在Sprite Kit中工作时,请注意SKScene是SKNode的成员。调用removeAllActions
只会删除应用于屏幕的操作,而调用removeAllChildren
只会删除子项,而不会删除操作。
您需要给所有孩子打电话removeAllActions
,让他们停止移动。
如果您想让场景的方法移除所有孩子的行为,请在SKNode
设置扩展程序。
extension SKNode
{
func removeAllActionsIncludingChildren()
{
self.removeAllActions()
self.children.map { $0.removeAllActionsIncludingChildren()}
}
}