2017-05-27 2 views
2

Ich brauche Hilfe zu diesem Thema, in meinem Spiel, wenn ein Knoten angezapft wird, wird eine Kugel abgefeuert, aber das Problem ist, dass ich kontinuierlich und viel tippen kann von Kugeln Feuer, ich möchte eine Art Verzögerung zum Schuss hinzufügen.wie man eine Verzögerung hinzufügt, wenn man tippt, wenn man eine Kugel auf mein Spiel feuert

hier ist meine Berührungen Code begann

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

Sie können ** [ 'Timers'] (https://developer.apple.com/reference/ verwenden zu deaktivieren Foundation/Timer) ** –

+0

Könntest du mir ein Codebeispiel zeigen, wie ich das zum Spiel hinzufügen könnte? –

+0

Siehe DuncanCs Antwort. Genau das meinte ich. –

Antwort

1

Flaggen deklarieren, um mehrere Schuss sofort

let minFireDelay = 0.5 

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

aktualisieren berührt begann

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

Da es Namen "player1", "player2" usw. gibt, nehme ich an, dass es 3 separate Spieler gibt und jeder sollte in der Lage sein, seine Waffe unabhängig zu feuern, wie in meiner Antwort beschrieben. –

+0

Fügen Sie für jeden Spieler eine Flagge hinzu. siehe Edits –

+0

Ich konnte es arbeiten die Hilfe von allen zu schätzen :) –

1

Suchen Timer

Die Idee ist wie folgt (NSTimer in Swift 2 und Objective-C.):

Haben Sie einen gunXEnabledBool für die Waffe jedes Spielers. Setzen Sie jedes Bool zunächst auf wahr.

Lassen Sie Ihre Methode überprüfen gun1Enabled. Wenn falsch, nichts tun.

Wenn gun1Enabled == true, feuern die Waffe, Set gun1Enabled = false und einen Timer starten, der die Waffe wieder aktivieren, sobald es ausgelöst wird:

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

Ich habe Ihnen den unbekannten Teil, um den Timer zu schaffen. Sehen Sie, ob Sie den Rest ausarbeiten können, und wenn nicht, posten Sie Ihren Code mit Informationen darüber, was nicht funktioniert.

Verwandte Themen