2016-03-26 38 views
2

SpriteKit Oyunda düşman dalgaları yumurtlamaya çalışıyorum. Bu kodun işe yarayacağını düşündüm. Bir sonraki çağrıyı yapmadan önce her bir dalganın tamamlanması için runAllWaves()'u nasıl yapabilirim? sonunda buSpriteKit Swift 2 Eylemler: düşman dalgaları yumurtlama

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

} 

cevap

0

Neden runNextWave işlevi uygulamak yoktur ve çağrı (Ben başka bütün ben sadece yerine her dalganın sonun başlangıcı dan saymak yapay waveWait süreyi artırabilir başarısız olursa fark) runWave? Her dalganın niteliklerini tanımlayan dizileriniz var; dizideki 1. öğe, bu wavein niteliklerini belirlerse, o zaman runWave sırasında bu girdileri kaldırabilirsiniz ve runWave sonunda diziler boş olana veya başka bir koşul karşılanana kadar tekrar runWave'u arayın.