2016-12-17 6 views
1

私はフラッシーな鳥のスタイルのゲームに1つの単純なレベルを追加しようとしています。私は2つの異なるシーンを使ってそれを行う方法を描いていますが、同じシーン内にあることを好むでしょう。私は単に15のスコアに達すると、より頻繁に壁を表示したい!ここに私のコード私の迅速なスプライトキットのゲームにレベルを追加しようとしています

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 


    if gameStarted == false{ 

     gameStarted = true 

     body.physicsBody?.affectedByGravity = true 



     let spawn = SKAction.run({ 
      () in 

      self.createWalls() 

     }) 
     let delay = SKAction.wait(forDuration: 2.0) 
     let spawnDelay = SKAction.sequence([delay, spawn]) 
     let spawnDelayForever = SKAction.repeatForever(spawnDelay) 
     self.run(spawnDelayForever) 


     let distance = CGFloat(self.frame.width + wallPair.frame.width) 
     let movePipes = SKAction.moveBy(x: -distance - 50, y: 0, duration: TimeInterval(0.01 * distance)) 
     let removePipes = SKAction.removeFromParent() 
     moveAndRemove = SKAction.sequence([movePipes,removePipes]) 




     body.physicsBody?.velocity = CGVector(dx: 0, dy: 0) 
     body.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 68)) 
     run(flap) 


     } 
がある

アイブ文がどの前

のようなif文であれば、Aを追加しようとした場合、スコア= 20 {

が、それだけでプレイヤーまで、インパルスを適用する遅延がスコアを持っています20.

私はその後、anoth

if score is between 0 and 20 then run my first spawning action 

を言うことができる方法はありますスコア> 20で産卵時間が遅くなる2回目の産卵をしたらどうなるでしょうか?

希望はこれが理にかなっています!ありがとう

答えて

1

spawnDelayForeverロジックを関数に移動し、パラメータとして2秒遅れで呼び出すと、ゲームスコアが20になったときに、spawnDelayForever関数を再度入力パラメータとして渡します。キーを使用してアクションを追加する必要があります。

self.run(spawnDelayForever(withDelay: 2.0), withKey: "spawnDelayForever") 

次に、実行する操作を削除してから、もう一度追加してください。

self.removeAction(forKey: "spawnDelayForever") 
self.run(spawnDelayForever(withDelay: 5.0), withKey: "spawnDelayForever") 

コードは次のようになります。

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    if gameStarted == false { 
     gameStarted = true 
     body.physicsBody?.affectedByGravity = true 

     self.run(spawnDelayForever(withDelay: 2.0), withKey: "spawnDelayForever") 
     // other code... 

    } else if score > 20 && spawnDelayApplied == false { 
     self.removeAction(forKey: "spawnDelayForever") 
     self.run(spawnDelayForever(withDelay: 5.0), withKey: "spawnDelayForever") 
     spawnDelayApplied = true 
    } 
} 

func spawnDelayForever(withDelay sec: TimeInterval) -> SKAction { 
    let spawn = SKAction.run({ 
     () in 
     self.createWalls() 
    }) 

    let delay = SKAction.wait(forDuration: sec) 
    let spawnDelay = SKAction.sequence([delay, spawn]) 

    return SKAction.repeatForever(spawnDelay) 
} 
+0

ありがとうと思います。 spawnDelayAppliedのBool文を設定する必要はありますか? – niX

+0

はい、 'spawnDelayApplied'のクラスレベルの変数を作成します。ただ1回だけ遅延を適用します。 –

+0

ありがとう!治療をします! – niX

関連する問題