2017-04-17 43 views
0

下面是我的didMove(toView:)和我用來產生我的精靈節點的函數。忽略代碼的彩色塊部分,但我試圖讓球產生並從原點上升,我沒有收到代碼中的錯誤,但球沒有出現在視圖中。我非常感謝你,如果你能抽出時間審查我的問題。如果您需要更清楚地解釋我的問題,請提出問題。我想知道爲什麼我的節點不在我的GameScene中

另請注意,球最初並不在場景中,我希望在調用該功能時添加到場景中。

class GameScene: SKScene { 


var greenBlock = SKSpriteNode() 
var redBlock = SKSpriteNode() 
var blueBlock = SKSpriteNode() 
var yellowBlock = SKSpriteNode() 

var greenBall = SKSpriteNode() 
var redBall = SKSpriteNode() 

var ballSpeed: TimeInterval = 4 

override func didMove(to view: SKView) { 

    greenBlock = self.childNode(withName: "greenBlock") as! SKSpriteNode 
    redBlock = self.childNode(withName: "redBlock") as! SKSpriteNode 
    blueBlock = self.childNode(withName: "blueBlock") as! SKSpriteNode 
    yellowBlock = self.childNode(withName: "yellowBlock") as! SKSpriteNode 

    redBall.name = "redBall" 
    greenBall.name = "greenBall" 

    spawnRedAndGreen() 




} 

func spawnRedAndGreen() { 

    redBall.position = CGPoint(x: 0, y: -1) 
    redBall.zPosition = 4 
    addChild(redBall) 


    greenBall.position = CGPoint(x: 0, y: 0) 
    greenBall.zPosition = 4 
    addChild(greenBall) 




    let upwardsMotion = SKAction.moveTo(y: 600, duration: ballSpeed) 
    let redDelay = SKAction.wait(forDuration: TimeInterval(randomBetweenNumbers(firstNum: 1, secondNum: 4))) 
    let greenDelay = SKAction.wait(forDuration: TimeInterval(randomBetweenNumbers(firstNum: 1, secondNum: 3))) 

    let redSequence = SKAction.sequence([upwardsMotion, redDelay]) 
    let greenSequence = SKAction.sequence([upwardsMotion, greenDelay]) 



    redBall.run(redSequence) 
    greenBall.run(greenSequence) 

} 

這是我用來生成隨機數的函數...

func randomBetweenNumbers(firstNum: CGFloat, secondNum: CGFloat) -> CGFloat { 

    return CGFloat(arc4random())/CGFloat(UINT32_MAX) * abs(firstNum - secondNum) + min(firstNum, secondNum) 

} 

更新的代碼(注意仍然不工作)。

class GameScene: SKScene { 


var greenBlock = SKSpriteNode() 
var redBlock = SKSpriteNode() 
var blueBlock = SKSpriteNode() 
var yellowBlock = SKSpriteNode() 

var greenBall = SKSpriteNode() 
var redBall = SKSpriteNode() 

var ballSpeed: TimeInterval = 4 

override func didMove(to view: SKView) { 

    greenBlock = self.childNode(withName: "greenBlock") as! SKSpriteNode 
    redBlock = self.childNode(withName: "redBlock") as! SKSpriteNode 
    blueBlock = self.childNode(withName: "blueBlock") as! SKSpriteNode 
    yellowBlock = self.childNode(withName: "yellowBlock") as! SKSpriteNode 


    greenBall.size = CGSize(width: 30, height: 30) 
    greenBall.position = CGPoint(x: 0, y: 0) 
    greenBall.zPosition = 4 



    redBall.size = CGSize(width: 30, height: 30) 
    redBall.position = CGPoint(x: 0, y: 0) 
    redBall.zPosition = 4 

    spawnRedAndGreen() 

} 

func spawnRedAndGreen() { 

    self.addChild(greenBall) 
    self.addChild(redBall) 


    let upwardsMotion = SKAction.moveTo(y: 1, duration: ballSpeed) 
    let redDelay = SKAction.wait(forDuration: TimeInterval(randomBetweenNumbers(firstNum: 1, secondNum: 4))) 
    let greenDelay = SKAction.wait(forDuration: TimeInterval(randomBetweenNumbers(firstNum: 1, secondNum: 3))) 

    let redSequence = SKAction.sequence([upwardsMotion, redDelay]) 
    let greenSequence = SKAction.sequence([upwardsMotion, greenDelay]) 



    redBall.run(redSequence) 
    greenBall.run(greenSequence) 

} 

我也意識到,節點數由2每次上升我所說的功能,但它不會出現在屏幕

回答

2

你需要指定節點或紋理的大小上顯示/圖片使用,否則它將不可見。如果您指定顏色,這也會很棒。

redBall.size = CGSize(width: 0.1, height: 0.1) 
redBall.color = .red 

而且你的行動迫使節點移動速度飛快(y = 600實在是太多了,你可以把它改成1),所以你上面的變化後只能看到一個閃爍。

+0

嘿感謝您的答覆,但即時通訊。除此之外,我欣賞你的反應非常。 –

+0

他不是說物理的力量,他是說你正在使節點快速移動 – Knight0fDragon

+0

對不起,我沒有正確地讀你的迴應我已經嘗試添加位置,但它還沒有工作。 –

0

解決(感謝大家的輸入我終於得到它使用動作的moveTo沒有任何部隊或衝動工作

class GameScene: SKScene { 


var greenBlock = SKSpriteNode() 
var redBlock = SKSpriteNode() 
var blueBlock = SKSpriteNode() 
var yellowBlock = SKSpriteNode() 

var greenBall = SKSpriteNode() 
var redBall = SKSpriteNode() 

var ballSpeed: TimeInterval = 4 

override func didMove(to view: SKView) { 

    greenBlock = self.childNode(withName: "greenBlock") as! SKSpriteNode 
    redBlock = self.childNode(withName: "redBlock") as! SKSpriteNode 
    blueBlock = self.childNode(withName: "blueBlock") as! SKSpriteNode 
    yellowBlock = self.childNode(withName: "yellowBlock") as! SKSpriteNode 

    greenBall = SKSpriteNode(imageNamed: "greenBall") 
    greenBall.size = CGSize(width: 30, height: 30) 
    greenBall.position = CGPoint(x: 0, y: 0) 
    greenBall.zPosition = 4 



    redBall = SKSpriteNode(imageNamed: "redBall") 
    redBall.size = CGSize(width: 30, height: 30) 
    redBall.position = CGPoint(x: 0, y: 0) 
    redBall.zPosition = 4 



    spawnRedAndGreen() 

} 

func spawnRedAndGreen() { 




    let upwardsMotion = SKAction.moveTo(y: 1000, duration: ballSpeed) 
    let redDelay = SKAction.wait(forDuration: TimeInterval(randomBetweenNumbers(firstNum: 1, secondNum: 4))) 
    let greenDelay = SKAction.wait(forDuration: TimeInterval(randomBetweenNumbers(firstNum: 1, secondNum: 3))) 

    let redSequence = SKAction.sequence([upwardsMotion, redDelay]) 
    let greenSequence = SKAction.sequence([upwardsMotion, greenDelay]) 


    self.addChild(redBall) 

    redBall.run(redSequence) 

    greenBall.run(greenSequence) 

} 
相關問題