【问题标题】:Spawning SkShapeNodes with NSTimer Swift使用 NSTimer Swift 生成 SkShapeNodes
【发布时间】:2015-05-12 00:59:43
【问题描述】:

我正在使用 sprite kit 创建一个游戏,我想在屏幕上以特定间隔生成敌人。截至目前,只要计时器应该执行其操作,我运行的代码就会崩溃,给我错误消息线程 1:EXC_BAD_ACCESS (code=1, address=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秒后,当设置定时器重启功能时,游戏崩溃。任何帮助,将不胜感激。谢谢!

【问题讨论】:

    标签: ios swift sprite-kit nstimer skshapenode


    【解决方案1】:

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

    SKAction.waitForDuration(some value)
    

    如果你想让它永远重复自己,你也可以使用

    SKAction.repeatActionForever(your action)
    

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

    【讨论】:

      【解决方案2】:

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

      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)
      
      }
      

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-13
        • 1970-01-01
        • 2015-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多