2015-04-05 58 views
2

感謝。 我設置在屏幕中間的圓圈用位置精靈與事先迅速和spritekit

circle = SKShapeNode(circleOfRadius: 100) // Size of Circle 
    circle.position = CGPointMake(frame.midX, frame.midY) //Middle of Screen 
    circle.strokeColor = SKColor.whiteColor() 
    circle.glowWidth = 1.0 
    circle.fillColor = SKColor.orangeColor() 
    self.addChild(circle) 

我想要做的是,當用戶點擊屏幕,一個精靈會出現從一個隨機位置,並且向中心移動的屏幕。我得到的問題是,有時精靈會出現在圓圈內。所以我的計劃是讓精靈從屏幕外側向中心移動。我怎樣才能做到這一點?

這裏是我與隨機位置

let randomX = CGFloat(arc4random()) % self.frame.weith 
let randomY = CGFloat(arc4random()) % self.frame.height 

然後設定精靈做的代碼

sprite.position = CGPointMake(randomX, randomY) 

我嘗試了以下設置精靈的隨機位置,他們沒有正在

let randomX = Int(arc4random_uniform(UInt32(self.frame.width + self.frame.width/2))) || Int(arc4random_uniform(UInt32(self.frame.width - self.frame.width/2))) 
let randomY = Int(arc4random_uniform(UInt32(self.frame.height + self.frame.height/2))) || Int(arc4random_uniform(UInt32(self.frame.height - self.frame.height/2))) 

let randomX = (CGFloat(arc4random()) % self.frame.width + self.frame.width/2) || (CGFloat(arc4random()) % self.frame.width - self.frame.width/2) 
let randomY = (CGFloat(arc4random()) % self.frame.height + self.frame.height/2) || (CGFloat(arc4random()) % self.frame.height - self.frame.height/2) 
+0

計算位置範圍在圈內,檢查是否在隨機位置在圓圈中,如果再次這樣做隨機計算。直到你得到正確的隨機值。 – duan 2015-04-05 10:14:08

回答

1

要生成的斯威夫特,你可以使用下面的隨機位置:

var randomX = CGFloat(Int(arc4random()) % width) 
var randomY = CGFloat(Int(arc4random()) % height) 

我們生成一個隨機的位置離你需要在4個可能的位置來生成位置屏幕 - 關閉屏幕左,右,上或下。

本質上,它是你試圖用你||做語句,但是這對於分配非布爾變量不起作用。

實施例:

func randomPointOffscreen() -> CGPoint 
{ 
    let spawn = arc4random_uniform(4)+1 
    var randomX:CGFloat = -100 
    var randomY:CGFloat = 100 

    switch(spawn) 
    { 
    case 1: 
     randomX = -CGFloat(Int(arc4random()) % 320) 
     randomY = CGFloat(Int(arc4random()) % 640) 
     break; 
    case 2: 
     randomX = 320 + CGFloat(Int(arc4random()) % 320) 
     randomY = CGFloat(Int(arc4random()) % 640) 
     break; 
    case 3: 
     randomX = CGFloat(Int(arc4random()) % 320) 
     randomY = 640 + CGFloat(Int(arc4random()) % 640) 
     break; 
    case 4: 
     randomX = CGFloat(Int(arc4random()) % 320) 
     randomY = -CGFloat(Int(arc4random()) % 640) 
     break; 
    default: 
     break; 
    } 
    return CGPointMake(randomX, randomY) 
} 
+0

我明白這個背後的邏輯和你提供的代碼,我應該怎麼稱呼它?我目前使用:sprite.position = CGPointMake(randomX,randomY) – 2015-04-05 15:56:54

+0

我更新的代碼是一個返回點的函數。用它來創建一個隨機點並將你的精靈位置設置爲你所提到的那個點,sprite.position = CGPointMake – chrissukhram 2015-04-05 17:56:20

+0

謝謝,這個工程。 – 2015-04-05 19:41:27