2017-06-29 112 views
1

我想在X軸上隨機產生一個對象,但它只在中心產卵。SpriteKit-隨機生成的菌種

下面是我的報價與產卵有關。少了什麼東西?

//隨機FUNC

func random() -> CGFloat { 
    return CGFloat(Float(arc4random())/0xFFFFFFFF) 
} 

func random(min: CGFloat, max: CGFloat) -> CGFloat { 
    return random() * (max - min) + min 
} 

//產卵貓FUNC

func spawnCat(){ 

    let randomXStart = random(min: gameArea.minX, max: gameArea.maxX) 
    let randomXEnd = random(min: gameArea.minX, max: gameArea.maxX) 

    let startPoint = CGPoint(x: randomXStart, y:self.size.height * 1.2) 
    let endPoint = CGPoint(x: randomXEnd, y: -self.size.height * 1) 

    let cat = SKSpriteNode(imageNamed: "before right") 
    cat.setScale(0.3) 
    cat.position = startPoint 
    cat.zPosition = 1 
    self.addChild(cat) 

    let moveCat = SKAction.move(to: endPoint, duration: 2) 
    let deleteCat = SKAction.removeFromParent() 
    let catSequence = SKAction.sequence([moveCat, deleteCat]) 
    cat.run(catSequence) 

} 
+0

添加打印語句,並打印出你的隨機函數輸出,以及變量randomXStart的值是什麼 –

+0

附註,使用'arc4random_uniform'而不是你的隨機方法 – Knight0fDragon

+0

「gameArea」代碼是什麼樣的? – sicvayne

回答

3

使用,而不是得到你想要的

func spawnCat(){ 



    let randomXStart = CGFloat(arc4random_uniform(UInt32(gameArea.maxX - gameArea.minX))) + CGFloat(gameArea.minX) 
    let randomXEnd = CGFloat(arc4random_uniform(UInt32(gameArea.maxX - gameArea.minX))) + CGFloat(gameArea.minX) 
    let startPoint = CGPoint(x: randomXStart, y:self.size.height * 1.2) 
    let endPoint = CGPoint(x: randomXEnd, y: -self.size.height * 1) 

    let cat = SKSpriteNode(imageNamed: "before right") 
    cat.setScale(0.3) 
    cat.position = startPoint 
    cat.zPosition = 1 
    self.addChild(cat) 

    let moveCat = SKAction.move(to: endPoint, duration: 2) 
    let deleteCat = SKAction.removeFromParent() 
    let catSequence = SKAction.sequence([moveCat, deleteCat]) 
    cat.run(catSequence) 

} 

的結果如果與這個越來越0 arc4random_uniform代碼則表示您的遊戲區域寬度爲0

+0

感謝的人,我改變了我的代碼 FUNC randomInRange(LO:浮動,喜:浮) - >浮動{ 回報LO +浮動(arc4random_uniform(UInt32的(HI - LO + 1))) } FUNC spawnCat( ){ // MinX(左)和MaxX(右)之間的x座標: let randomX = randomInRange(lo:Float(self.frame.minX + 5),hi:Float(self.frame.maxX + 5) ) let startPoint = CGPoint(x:CGFloat(randomX),y:self.frame.height * 1.2) let endPoint = CGPoint(x:CGFloat(randomX),y:self.frame.height * -0.5) 讓貓= SKSpriteNode(imageNamed:「右前」) –

+0

它也可以工作 –