2017-05-27 12 views
2

ノードでタップしたときにゲームでこの問題の助けが必要ですが、弾丸が発射されると問題が発生します。弾丸が発射されると、私はショットに何らかの遅れを加えたいと思います。ここ ゲームで弾を発射したときにタップしたときに遅延を追加する方法

は私のタッチがコード

for touch: AnyObject in touches{ 
     let pointOfTouch = touch.location(in:self) 

     if player1.contains(pointOfTouch) { 
      fireBullet1() 
     } 

     if player2.contains(pointOfTouch) { 
      fireBullet2() 
     } 

     if player3.contains(pointOfTouch) { 
      fireBullet3() 
     } 
    } 
    } 
} 
func fireBullet1() { 

    let bullet = SKSpriteNode(imageNamed: "b") 
    bullet.position = player1.position 
    bullet.zPosition = 1 
    self.addChild(bullet) 

    let moveBullet = SKAction.moveTo(y: self.size.height + bullet.size.height, duration: 1) 
    let deleteBullet = SKAction.removeFromParent() 
    let bulletSequence = SKAction.sequence([moveBullet, deleteBullet]) 
    bullet.run(bulletSequence) 



} 

func fireBullet2() { 

    let bullet2 = SKSpriteNode(imageNamed: "b") 
    bullet2.position = player2.position 
    bullet2.zPosition = 1 
    self.addChild(bullet2) 

    let moveBullet = SKAction.moveTo(y: self.size.height + bullet2.size.height, duration: 1) 
    let deleteBullet = SKAction.removeFromParent() 
    let bulletSequence = SKAction.sequence([moveBullet, deleteBullet]) 
    bullet2.run(bulletSequence) 





} 

func fireBullet3() { 

    let bullet3 = SKSpriteNode(imageNamed: "b") 
    bullet3.position = player3.position 
    bullet3.zPosition = 1 
    self.addChild(bullet3) 


    let moveBullet = SKAction.moveTo(y: self.size.height + bullet3.size.height, duration: 1) 
    let deleteBullet = SKAction.removeFromParent() 
    let bulletSequence = SKAction.sequence([moveBullet, deleteBullet]) 
    bullet3.run(bulletSequence) 



} 
+0

を開始しましたファンデーション/タイマー)** –

+0

これをゲームに追加する方法のコード例を教えてください。 –

+0

DuncanCの答えを参照してください。それはまさに私が意味していたものです。 –

答えて

1

宣言フラグが複数の発射を無効にするには、すぐに

let minFireDelay = 0.5 

var allowsFire1 = true 
var allowsFire2 = true 
var allowsFire3 = true 

更新タッチがhttps://developer.apple.com/reference/([ `Timers`] **

を使用でき
for touch: AnyObject in touches { 

    let pointOfTouch = touch.location(in:self) 

    if allowsFire1 && player1.contains(pointOfTouch) { 
     fireBullet1() 
     // disable firing temporarily 
     allowsFire1 = false 
     DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + minFireDelay) { 
      allowsFire1 = true 
     } 
    } 

    if allowsFire2 && player2.contains(pointOfTouch) { 
     fireBullet2() 
     // disable firing temporarily 
     allowsFire2 = false 
     DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + minFireDelay) { 
      allowsFire2 = true 
     } 
    } 

    if allowsFire3 && player3.contains(pointOfTouch) { 
     fireBullet3() 
     // disable firing temporarily 
     allowsFire3 = false 
     DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + minFireDelay) { 
      allowsFire3 = true 
     } 
    } 
} 
+0

"player1"、 "player2"などの名前があるので、3つの別々のプレイヤーがいることを意味し、それぞれのプレイヤーが自分の銃を独立して発射できるはずです。 –

+0

各プレイヤーに1つのフラグを追加します。編集を参照してください –

+0

私はそれが働いてみんなから助けを感謝することができた:) –

1

Timer見上げて始まっている次のように

アイデアがある(スウィフト2とObjective-CでNSTimerを。):

gunXEnabledBool用を持っています各プレイヤーの銃。最初に各Boolをtrueに設定します。

あなたのfireBullet1()メソッドチェックはgun1Enabledですか? falseの場合は何もしないでください。

gun1Enabled == true場合は、銃を発射gun1Enabled = falseを設定し、それは発射後に銃を再度有効にしますタイマーを開始:

Timer.scheduledTimer(withTimeInterval: 0.5, repeats: false) { 
    (timer) -> Void) in 
    gun1Enabled = true 
} 

私はタイマーを作成し、あなたになじみのない部分を与えたが。残りの部分を解決できるかどうかを確認し、そうでない場合は、コードが動作していないことに関する情報を投稿してください。

関連する問題