节点的设置计时器

时间:2017-11-04 16:59:26

标签: swift timer sprite-kit sknode

我试图为每个创建的节点设置一个计时器(通过触摸屏幕)。我想设置一个计时器来知道何时删除节点(通过使用removefromparent)。我希望如果某个节点位于某个位置5秒钟,那么它将从屏幕中删除。 我是swift的新手,我真的不知道如何设置计时器。我用这个init:

let ballTimer = Timer.scheduledTimer(withTimeInterval: 1, repeats: false, block: <#T##(Timer) -> Void#>)

我明白了&#34; withTimeInterval&#34;用于设置第二个 - 所以我将其设置为1.&#34;重复&#34;和&#34;块&#34;属性我真的没有,所以我不确定我是否使用正确的功能。

任何人都可以帮助我吗?

3 个答案:

答案 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应答将其从视图中删除。