2016-03-26 20 views
2

私はSpriteKitゲームで敵の波を発生させようとしています。 このコードがうまくいくと思いました。 runAllWaves()は、どのウェーブが完了するのを待ってから次のウェーブを呼び出すのですか?あなたがrunNextWave機能を実装し、最後にそれを呼び出すことはありませんなぜSpriteKit Swift 2アクション:敵の波を生成する

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

} 

答えて

0

を(私は他のすべてが失敗した場合、私はちょうど、各波の終わりの代わりに、最初からカウントするために人為的にwaveWait時間を増やすことができます実現します) runWave?各ウェーブの属性を定義する配列があります。配列の最初の要素が波の属性を決定している場合は、runWaveの間にこれらのエントリを削除し、runWaveの末尾に配列が空になるか、またはその他の条件が満たされるまでrunWaveを呼び出します。

関連する問題