【问题标题】:SpriteKit Swift 2 Actions: spawning enemy wavesSpriteKit Swift 2 Actions:产生敌人的波浪
【发布时间】:2016-07-14 02:11:36
【问题描述】:

我正在尝试在 SpriteKit 游戏中生成一波又一波的敌人。 我认为这段代码会起作用。如何让runAllWaves() 等待每一波完成,然后再调用下一波? (我意识到如果所有其他方法都失败了,我可以人为地增加 waveWait 时间,从每个波的开始而不是结束计数)

import SpriteKit

let waveWait =  [5, 10, 10] // pause before each wave
let waveCount = [10, 20, 50] // num. of enemies in each wave
let waveDelay = [3, 2, 1] // pause before each enemy spawns
let waveHealth = [1, 2, 3] // enemy health for each wave

var index:Int = 0

var spawn = SKAction()
var delay = SKAction()
var spawndelay = SKAction()
var repeatspawndelay = SKAction()
var wait = SKAction()
var dowave = SKAction()

var doAllWaves = SKAction()


class GameScene: SKScene {

    override func didMoveToView(view: SKView) {

        print("begin!")

         runAllWaves()
    }

    func runWave(index:Int){

        spawn = SKAction.runBlock({ self.spawnEnemy(index) })
        delay = SKAction.waitForDuration(NSTimeInterval(waveDelay[index]))
        spawndelay = SKAction.sequence([spawn, delay])
        repeatspawndelay = SKAction.repeatAction( spawndelay , count: waveCount[index])

        self.runAction(repeatspawndelay)

    }

    func runAllWaves(){
        runAction(SKAction.sequence([
            SKAction.waitForDuration(NSTimeInterval(waveWait[index])),
            SKAction.runBlock({ self.runWave(index)  }) ]),
            completion: {
                index += 1
                if index < 3 { self.runAllWaves() }})
    }

    func spawnEnemy(index:Int){ print("spawn enemy with health: " + String(waveHealth[index])) }

}

【问题讨论】:

    标签: swift sprite-kit skaction completion


    【解决方案1】:

    为什么不实现runNextWave 功能并在runWave 末尾调用它?您有定义每个波的属性的数组;如果数组中的第一个元素确定了波的属性,那么在runWave 期间,您可以删除这些条目,并在runWave 结束时再次调用runWave,直到数组为空或满足其他条件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多