使用 `SKNode` 作为 "world container" 触发 NSException
Using `SKNode` as "world container" triggering NSException
我在使用 SKNode
-s 作为一个 "container" 时遇到了问题,上面有各种精灵。我想以这种方式进行,因为我希望能够只移动整个 SKNode
,而不是单独移动每个组件。如果有人能解释我做错了什么,我将不胜感激。这是一个示例,其中我删除了不会导致任何错误的所有内容,只留下导致错误的部分。
class GameScene: SKScene {
let jumper = SKSpriteNode(imageNamed: "doodler.png")
let brick = SKSpriteNode(imageNamed: "brick.png")
let worldNode = SKNode()
override func didMoveToView(view: SKView) {
addChild(worldNode)
setupBricks()
}
func addBrick() {
let randomX = random(min: size.width*0.1, max: size.height*0.9)
let randomY = random(min: size.width*0.1, max: size.height*0.9)
brick.position = CGPointMake(randomX, randomY)
brick.name = "brick"
brick.size = CGSizeMake(70, 10)
brick.physicsBody = SKPhysicsBody(rectangleOfSize: brick.size)
worldNode.addChild(brick)
}
func setupBricks() {
for _ in 0...10 {addBrick()}
}
在另一个游戏中,我遇到了一个问题,每次两个特定的对象发生碰撞时,游戏都会崩溃并给出与我现在遇到的相同的错误:
libc++abi.dylib: terminating with uncaught exception of type NSException
在您的代码中的某个地方,您只是调用一个子项,例如 "brick" 即 nil
。
检查你的代码并像这样保护它:
if let nodeToAdd: SKSpriteKit = self.childNodeWithName("brick") {
addBrick(nodeToAdd)
}
尝试创建一个 class o 积木:
class Brick: SKSpriteNode {
init(position:CGPoint) {
let texture = SKTexture(imageNamed: "brick.png")
super.init(texture: texture, color: nil, size: texture.size())
self.position = position
self.physicsBody = SKPhysicsBody(rectangleOfSize: brick.size)
}
在你的场景中:
func addBrick() {
let randomX = random(min: size.width*0.1, max: size.height*0.9)
let randomY = random(min: size.width*0.1, max: size.height*0.9)
let position = CGPointMake(randomX, randomY)
let brick = Brick(position)
worldNode.addChild(brick)
}
我在使用 SKNode
-s 作为一个 "container" 时遇到了问题,上面有各种精灵。我想以这种方式进行,因为我希望能够只移动整个 SKNode
,而不是单独移动每个组件。如果有人能解释我做错了什么,我将不胜感激。这是一个示例,其中我删除了不会导致任何错误的所有内容,只留下导致错误的部分。
class GameScene: SKScene {
let jumper = SKSpriteNode(imageNamed: "doodler.png")
let brick = SKSpriteNode(imageNamed: "brick.png")
let worldNode = SKNode()
override func didMoveToView(view: SKView) {
addChild(worldNode)
setupBricks()
}
func addBrick() {
let randomX = random(min: size.width*0.1, max: size.height*0.9)
let randomY = random(min: size.width*0.1, max: size.height*0.9)
brick.position = CGPointMake(randomX, randomY)
brick.name = "brick"
brick.size = CGSizeMake(70, 10)
brick.physicsBody = SKPhysicsBody(rectangleOfSize: brick.size)
worldNode.addChild(brick)
}
func setupBricks() {
for _ in 0...10 {addBrick()}
}
在另一个游戏中,我遇到了一个问题,每次两个特定的对象发生碰撞时,游戏都会崩溃并给出与我现在遇到的相同的错误:
libc++abi.dylib: terminating with uncaught exception of type NSException
在您的代码中的某个地方,您只是调用一个子项,例如 "brick" 即 nil
。
检查你的代码并像这样保护它:
if let nodeToAdd: SKSpriteKit = self.childNodeWithName("brick") {
addBrick(nodeToAdd)
}
尝试创建一个 class o 积木:
class Brick: SKSpriteNode {
init(position:CGPoint) {
let texture = SKTexture(imageNamed: "brick.png")
super.init(texture: texture, color: nil, size: texture.size())
self.position = position
self.physicsBody = SKPhysicsBody(rectangleOfSize: brick.size)
}
在你的场景中:
func addBrick() {
let randomX = random(min: size.width*0.1, max: size.height*0.9)
let randomY = random(min: size.width*0.1, max: size.height*0.9)
let position = CGPointMake(randomX, randomY)
let brick = Brick(position)
worldNode.addChild(brick)
}