使用 `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)
}