2017-05-27 35 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 
} 

我给你不熟悉的部分,创造了计时器。看看你是否可以解决其余的问题,如果没有,请发布代码,告诉你什么不工作。