我试图为每个创建的节点设置一个计时器(通过触摸屏幕)。我想设置一个计时器来知道何时删除节点(通过使用removefromparent)。我希望如果某个节点位于某个位置5秒钟,那么它将从屏幕中删除。 我是swift的新手,我真的不知道如何设置计时器。我用这个init:
let ballTimer = Timer.scheduledTimer(withTimeInterval: 1, repeats: false, block: <#T##(Timer) -> Void#>)
我明白了&#34; withTimeInterval&#34;用于设置第二个 - 所以我将其设置为1.&#34;重复&#34;和&#34;块&#34;属性我真的没有,所以我不确定我是否使用正确的功能。
任何人都可以帮助我吗?
答案 0 :(得分:1)
如果您使用的是Spritekit,则无需使用计时器。 Spritekit拥有自己的内置计时机制,游戏循环调用Update,以及在指定时间内运行动作以触发事件的方式。
let ball = SKSpriteNode(color: red, size: CGSize: CGSize(width: 100, height: 100))
ball.zPosition = 1
ball.position = CGPoint(x: 100, y: 100)
addChild(ball)
let wait = SKAction.wait(forDuration: 5.0)
let remove = SKAction.removeFromParent()
let sequence = SKAction.sequence([wait, remove])
ball.run(sequence)
答案 1 :(得分:0)
您应该使用场景的update()
功能。该覆盖运行每一帧,以便您可以检查您的定位,并跟踪每个节点,您可以启动或重新启动wait()
操作,在完成时删除该节点。
类似的东西,
if ball.position.x == 200 && ball.position.y == 200 {
let wait = SKAction.wait(forDuration: 5.0)
let remove = SKAction.removeFromParent()
let sequence = SKAction.sequence([wait, remove])
ball.run(sequence)
}else{
ball.removeAllActions()
}
注意:你不应该使用这样的特定坐标,但要使用至少几个点的范围或者对x和y值进行四舍五入。
答案 2 :(得分:0)
感谢帮助!我最终做的是这个:
override func update(_ currentTime: TimeInterval) {
self.enumerateChildNodes(withName: "BALL") { (node:SKNode, nil) in
if node.position.y <= 25 || node.position.x <= 50 {
let wait = SKAction.wait(forDuration: 3.0)
let remove = SKAction.removeFromParent()
let sequence = SKAction.sequence([wait, remove])
print("in range")
node.run(sequence)
}
}
}
首先,我通过更新功能运行它,然后我按名称(BALL)搜索节点,然后我使用heValyreanGroup应答将其从视图中删除。