使用NSTimer Swift生成SkShapeNodes

时间:2015-05-12 00:59:43

标签: ios swift sprite-kit nstimer skshapenode

我正在用精灵工具包创建一个游戏,我想以一定的间隔在屏幕上产生敌人。到目前为止,一旦计时器应该执行其操作,我运行的代码崩溃,给我错误消息线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x0)。这是我试图制定的代码。

        func randomElement() -> SKShapeNode! {
        let index = Int(arc4random_uniform(UInt32(arrayOfEnemies.count)))
        return arrayOfEnemies[index] as! SKShapeNode
    }

    func randomElement2() -> SKShapeNode! {
        let index = Int(arc4random_uniform(UInt32(arrayOfEnemies2.count)))
        return arrayOfEnemies2[index] as! SKShapeNode
    }

    func randomElement3() -> SKShapeNode! {
        let index = Int(arc4random_uniform(UInt32(arrayOfEnemies3.count)))
        return arrayOfEnemies3[index] as! SKShapeNode
    }

    func randomElement4() -> SKShapeNode! {
        let index = Int(arc4random_uniform(UInt32(arrayOfEnemies4.count)))
        return arrayOfEnemies4[index] as! SKShapeNode
    }

    let addEnemy = randomElement()

    let addEnemy2 = randomElement2()

    let addEnemy3 = randomElement3()

    let addEnemy4 = randomElement4()


    func addAllEnemies() {
        self.addChild(addEnemy)
        self.addChild(addEnemy2)
        self.addChild(addEnemy3)
        self.addChild(addEnemy4)
    }

    var Enemy = NSTimer.scheduledTimerWithTimeInterval(3.0, target: self, selector: Selector(addAllEnemies()), userInfo: nil, repeats: true)

在游戏开始时,4个随机敌人产生并做他们应该做的事情。 3秒后,当计时器设置为重启功能时,游戏崩溃。任何帮助,将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

如果您使用Sprite-kit创建游戏,在项目中集成Timers的最佳方法是使用SKAction而不是NSTimer

SKAction.waitForDuration(some value)

如果您希望它永远重复,您也可以使用

SKAction.repeatActionForever(your action)

之后,您可以创建一个自定义函数,当计时器通过SKAction结束时调用该函数。

答案 1 :(得分:0)

每次要添加敌人时都需要重新创建敌人。在方法中创建它们并制作副本应该为您解决。

func addAllEnemies() {

    let addEnemy = randomElement().copy()
    let addEnemy2 = randomElement2().copy()
    let addEnemy3 = randomElement3().copy()
    let addEnemy4 = randomElement4().copy()
    self.addChild(addEnemy)
    self.addChild(addEnemy2)
    self.addChild(addEnemy3)
    self.addChild(addEnemy4)

}

希望这有帮助。