簡體   English   中英

我想知道為什么我的節點不在我的GameScene中

[英]I want to know why my nodes aren't in my GameScene

以下是我的didMove(toView:)和我用來生成Sprite節點的函數。 忽略代碼的彩色塊部分,但我試圖使球從原點生成並上升,我沒有從代碼中收到任何錯誤,但球未顯示在視圖中。 如果您能抽出寶貴時間復習我的問題,我將非常感謝。 如果您需要更清楚地說明我的問題,請提出問題。

還請考慮一下,這些球最初不在場景中,我希望在調用函數時將其添加到場景中。

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,但是它不會顯示在屏幕上

您需要指定節點的大小或要使用的紋理/圖像,否則它將不可見。 如果指定顏色,那也很好。

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

同樣,您的操作會強制節點快速瘋狂移動( y = 600太大,您可以將其更改為1 ),因此在上述更改之后,您只會看到閃爍。

解決了(感謝大家的投入,我終於開始工作了

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)

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM