2016-11-16 51 views
1

我正在做一個遊戲,並且我有從屏幕頂部落到底部的對象。我想在這些對象之間產生選擇並放下其中的一個。我目前同時下降。選擇產生不同的SKSpriteNode

func ShapePicker() -> SKSpriteNode{ 
    let shapeArray = [purpleOctagon, coin, greenTriangle, orangeHexagon] 

    let MaxValue = self.size.width/2 - 200 
    let MinValue = self.size.width/3 * 0.95 

    let rangeMax = UInt32(MaxValue) 
    let rangeMin = UInt32(MinValue) 

    purpleOctagon.position = CGPoint(x: CGFloat(arc4random_uniform(rangeMin) + rangeMax), y: self.size.height) 
    self.addChild(purpleOctagon) 

    greenTriangle.position = CGPoint(x: CGFloat(arc4random_uniform(rangeMin) + rangeMax), y: self.size.height) 
    self.addChild(greenTriangle) 

    coin.position = CGPoint(x: CGFloat(arc4random_uniform(rangeMin) + rangeMax), y: self.size.height) 
    self.addChild(coin) 
    return shapeArray[Int(arc4random_uniform(UInt32(shapeArray.count)))] 

} 

我想程序隨機.addChild,因爲現在它只是使他們在屏幕上。

回答

1

你的代碼意味着你希望他們都在屏幕上,然後一個隨機下降...所以你想要繼續.addChild。你想要什麼,是爲了不讓他們一下子掉下去。

因此,您需要將.physicsBody.pinned更改爲true以將它們保留在屏幕的頂部。

然後,在你update()您可以檢查多少時間已經過去了,等,並有一定#秒鐘後,你可以做一個arc4random_uniform並使用該結果來改變節點之一的.pinned財產(從而導致那一個只有那一個纔會落下)。因此,如果硬幣是0,三角形是1,八角形是2,那麼,在你的.update記錄經過的時間和在說了3秒後,做一個隨機檢查0-2,並且那個檢查將會執行:

switch result { 
    case 0: // coin 
    coin.physicsBody?.pinned = false // makes it drop 
    case 1: // triangle 
    ... 

只要確保你的節點是在適當的範圍內,這樣就可以做邏輯update()

如果我讀您的問與答錯了,你只是想產卵,然後下降只是一個,那麼你仍然需要上面的switch語句,而不是改變physicsBody你會做.addChild

所以你FUNC裏面會更喜歡:

// This can be global or inside of your GameScene: 
var myGlobalCurrentTime: CFTimeInterval 

override func update(currentTime: CFTimeInterval) { 

    myGlobalCurrentTime = myTimerUpdateTime(currentTime) 

    func myDropFunc() { 

    ... // Initialize your nodes 

    let result = myRandomNumber(3) 

    switch result { 
     case 0: 
     coin.position 
     = CGPoint(x: CGFloat(arc4random_uniform(rangeMin) + rangeMax), 
        y: self.size.height) 
     self.addChild(coin) 
     case 1: 
     ... 
    } 
    } 

    // Execute the func: 
    myDropFunc() 
} 

我還是有點代碼和問題感到困惑,所以請在評論中澄清,所以如果需要,我可以更新這個答案。

+0

很抱歉,如果我的問題不夠清楚,但我不需要將對象固定到屏幕上,然後放下它們;它們在屏幕上方略高的位置創建,然後放下。問題是,他們在你記下的同時下降。我想改變他們的下降我已經有一個計時器產生他們在1-2.5秒之間,但他們一起。我想從我製作的形狀中隨機挑選一個形狀,然後放下一個。 – cuber

+0

@ uswer1242我的答案的第二部分涵蓋了這一點:)只要把你的函數放在'.update()'內,然後做你的時間計算......拋出一個'if'語句(檢查是否已經過去了2秒)然後運行你的函數,並在第二個塊中提出建議。 – Fluidity

+0

哦,我看到謝謝你的幫助,我真的很感激:)一個問題,但我會把時間間隔方法的情況下陳述? @流利 – cuber

0

您可以將addChild調用移出此函數,它將返回SKSpriteNode,然後您可以添加它。

let sprite = ShapePicker() 
addChild(sprite) 

或者,只需添加一個隨機選擇並返回它。你不需要addChild節點,你不打算使用

+0

沒有什麼東西在丟,我刪除了addChild調用,並提出了我在createScene方法中建議的代碼,但沒有任何內容正在丟失。 – cuber

+0

@ uswer1242他的代碼應該可以工作。當你在函數裏面加入'.addChild'時,他們都會掉落。你想要做的就是限制'.addChild'(如果你只想出現一個)或者改變'.physicsBody?.pinned',如果你希望全部出現,但只有一個出現。 (看我的回答) – Fluidity