节点的设置定时器
setup timer for a node
我正在尝试为创建的每个节点设置一个计时器(通过触摸屏幕)。我想设置一个计时器来知道何时删除节点(通过使用 removefromparent)。我希望如果某个节点在某个位置定位 5 秒,则它会从屏幕上移除。
我是 swift 的新手,我真的不知道该如何设置计时器。我使用这个初始化:
let ballTimer = Timer.scheduledTimer(withTimeInterval: 1, repeats: false, block: <#T##(Timer) -> Void#>)
我知道 "withTimeInterval" 用于设置第二个 - 所以我将其设置为 1。"repeats" 和 "block" 属性我没有真正得到,所以我不确定我是否使用了正确的功能。
有人可以帮我吗?
如果您使用的是 Spritekit,则无需使用计时器。 Spritekit 有自己的内置计时机制,游戏循环调用更新,以及 运行 指定时间触发事件的动作方式。
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)
你应该使用场景的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 值四舍五入。
感谢帮助!我最终做的是:
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 answer 将它从视图中删除。
我正在尝试为创建的每个节点设置一个计时器(通过触摸屏幕)。我想设置一个计时器来知道何时删除节点(通过使用 removefromparent)。我希望如果某个节点在某个位置定位 5 秒,则它会从屏幕上移除。 我是 swift 的新手,我真的不知道该如何设置计时器。我使用这个初始化:
let ballTimer = Timer.scheduledTimer(withTimeInterval: 1, repeats: false, block: <#T##(Timer) -> Void#>)
我知道 "withTimeInterval" 用于设置第二个 - 所以我将其设置为 1。"repeats" 和 "block" 属性我没有真正得到,所以我不确定我是否使用了正确的功能。
有人可以帮我吗?
如果您使用的是 Spritekit,则无需使用计时器。 Spritekit 有自己的内置计时机制,游戏循环调用更新,以及 运行 指定时间触发事件的动作方式。
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)
你应该使用场景的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 值四舍五入。
感谢帮助!我最终做的是:
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 answer 将它从视图中删除。