随机生成Spritekit节点

时间:2015-06-10 17:58:59

标签: swift sprite-kit nstimer skspritenode

我正在制作一个游戏,我有一个节点从屏幕顶部产生并掉落。但是我想让节点以3秒的时间间隔随机产生。因此,一秒钟产生,下一秒产生2.4秒,接下来产生1.7秒,依此类推。我正在努力解决代码应该是什么。

我目前用于产生节点的代码:

    let wait = SKAction.waitForDuration(3, withRange: 2)
    let spawn = SKAction.runBlock { addTears()
    }

    let sequence = SKAction.sequence([wait, spawn])
    self.runAction(SKAction.repeatActionForever(spawn))

我的addTears()函数的代码是:

func addTears() {
        let Tears = SKSpriteNode (imageNamed: "Tear")
        Tears.position = CGPointMake(Drake1.position.x, Drake1.position.y - 2)
        Tears.zPosition = 3
        addChild(Tears)

    //gravity
    Tears.physicsBody = SKPhysicsBody (circleOfRadius: 150)
    Tears.physicsBody?.affectedByGravity = true

    //contact
    Tears.physicsBody = SKPhysicsBody (circleOfRadius: Tears.size.width/150)
    Tears.physicsBody!.categoryBitMask = contactType.Tear.rawValue
    Tears.physicsBody!.contactTestBitMask = contactType.Bucket.rawValue
    }

1 个答案:

答案 0 :(得分:3)

不建议您将NSTimer与SpriteKit一起使用(请参阅SpriteKit - Creating a timer)。相反,要生成随机时间,您可以使用SKAction.waitForDuration:withRange:

  

创建一个随机时间段空闲的动作。

     

执行操作时,操作会等待指定的数量   时间,然后结束......

     

每次执行操作时,操作都会计算新的随机数   持续时间的值。持续时间可能会因任何方向而异   最多为 durationRange 参数值的一半...

要随机生成节点,您可以将waitForDuration:withRangerunBlock:组合在一起SKAction序列中。例如:

// I'll let you adjust the numbers correctly...
let wait = SKAction.wait(forDuration: 3, withRange: 2)
let spawn = SKAction.run {
    // Create a new node and it add to the scene...
}

let sequence = SKAction.sequence([wait, spawn])
self.run(SKAction.repeatForever(sequence))
// self in this case would probably be your SKScene subclass.