2017-05-27 33 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

您可以使用** ['Timers'](https://developer.apple.com/reference/基金會/定時器)** –

+0

你能告訴我一個關於如何將這個添加到遊戲中的代碼示例嗎? –

+0

查看DuncanC的回答。這正是我的意思。 –

回答

1

聲明標誌,以禁用多個發射立刻

let minFireDelay = 0.5 

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

更新觸摸開始

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

由於名稱爲「玩家1」,「玩家2」等,我認爲這意味着有3個獨立的玩家,每個玩家都應該能夠獨立開槍,如我的答案中所述。 –

+0

爲每個玩家添加一個標誌。看編輯 –

+0

我能夠得到它的工作欣賞來自所有人的幫助:) –

1

查找Timer

的想法如下(NSTimer斯威夫特2和Objective-C):

有一個gunXEnabledBool爲每個玩家的槍。最初將每個Bool設置爲true。

讓您的fireBullet1()方法檢查gun1Enabled。如果是假的,什麼都不要做

如果gun1Enabled == true,消防槍,設置gun1Enabled = false,並啓動一個定時器,一旦觸發,將重新啓用槍:

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

我給你不熟悉的部分,創造了計時器。看看你是否可以解決其餘的問題,如果沒有,請發佈代碼,告訴你什麼不工作。