[英]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.