2015-05-04 101 views
0
var timer = NSTimer.scheduledTimerWithTimeInterval(2, target: self, selector: Selector("spawnredbarrier"), userInfo: nil, repeats: true) 


} 

    func spawnredbarrier(){ 


     var barrier = SKSpriteNode(imageNamed: "redobstacle.png") 

     barrier.position = CGPointMake(515, 0) 
     let actionn = SKAction.moveToY(self.size.height, duration: 6) 
     barrier.runAction(SKAction.repeatActionForever(actionn)) 

     self.addChild(barrier) 

     var bluebarrier = SKSpriteNode(imageNamed: "blueobstacle.png") 

     bluebarrier.position = CGPointMake(515, 0) 
     let action = SKAction.moveToY(self.size.height, duration: 6) 
     bluebarrier.runAction(SKAction.repeatActionForever(action)) 

     self.addChild(bluebarrier) 

     var greenbarrier = SKSpriteNode(imageNamed: "greenobstacle.png") 

     greenbarrier.position = CGPointMake(515, 0) 
     let actionnn = SKAction.moveToY(self.size.height, duration: 6) 
     greenbarrier.runAction(SKAction.repeatActionForever(actionnn)) 

     self.addChild(greenbarrier) 



    } 

我希望定时器用于spawnbarriers选择一个随机的障碍,其行为每2秒选择一个随机的障碍

我怎么能做出这个动作随机

,也是我怎样才能使该持续时间是6,以特定的速度增加

回答

2

第一个问题:要在Swift中得到一个随机数,您可以使用此SO question的任何答案。我会选择this one为清楚:

此方法将产生给定的最小值和最大值

之间的随机int值
func randomInt(min: Int, max:Int) -> Int { 
    return min + Int(arc4random_uniform(UInt32(max - min + 1))) 
} 

一旦你有了这个,只需创建一个简单的开关语句:

let r = randomInt(0, 2) 
switch r{ 
case 0: self.addChild(barrier) 
case 1: self.addChild(bluebarrier) 
case 2: self.addChild(greenbarrier) 
default: println("Other") 
} 

你的功能将类似于:

func spawnredbarrier(){ 
     var barrier = SKSpriteNode(imageNamed: "redobstacle.png") 

     barrier.position = CGPointMake(515, 0) 
     let actionn = SKAction.moveToY(self.size.height, duration: 6) 
     barrier.runAction(SKAction.repeatActionForever(actionn)) 

     var bluebarrier = SKSpriteNode(imageNamed: "blueobstacle.png") 

     bluebarrier.position = CGPointMake(515, 0) 
     let action = SKAction.moveToY(self.size.height, duration: 6) 
     bluebarrier.runAction(SKAction.repeatActionForever(action)) 

     var greenbarrier = SKSpriteNode(imageNamed: "greenobstacle.png") 

     greenbarrier.position = CGPointMake(515, 0) 
     let actionnn = SKAction.moveToY(self.size.height, duration: 6) 
     greenbarrier.runAction(SKAction.repeatActionForever(actionnn)) 

     let r = randomInt(0, 2) 
     switch r{ 
     case 0: self.addChild(barrier) 
     case 1: self.addChild(bluebarrier) 
     case 2: self.addChild(greenbarrier) 
     default: println("Other") 
     } 
} 

第二个问题:您需要一个Timer(您已经知道如何触发一个,只需创建另一个),并且在目标方法中只需增加一个iVar来保存费率值。使用该伊娃,而不是硬编码6

更新

定义在类级别的实例变量,那么功能调整IVAR的值(你需要检查发生了什么,当n达到0) 。添加一个定时器,调用此功能,并使用n而不是硬编码6

var n: Int = 6 

function adjustIVar() { 
    self.n-- 
} 
+0

你如何使用伊维尔请我看起来这样做? –

+0

我想让6的值降下来 –

+0

已更新的答案! –