节点的设置定时器

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 将它从视图中删除。