将自定义类SKSpriteNode加载到SKScene时,应用崩溃

时间:2018-06-29 17:36:14

标签: swift sprite-kit scenekit

我正在使用自己的SKSpriteNode类以编程方式创建SKSpriteNode。我想知道如何将这个SKSpriteNode添加到场景中。当我尝试在我的场景类的didMove()函数中添加addChild()时,我的应用程序不断崩溃。

class ChaosScene: SKScene {
var dragonNode: Dragon!

     override func didMove(to view: SKView) {
            dragonNode.createDragon()
            addChild(dragonNode)
        }
    }

class Dragon: SKSpriteNode {    
    var dragonNode: SKSpriteNode!
    func createDragon() {
            // Create Dragon
            dragonNode = SKSpriteNode(imageNamed: "dragon_2_fly_001")
            dragonNode.name = "dragon"
            dragonNode.physicsBody = SKPhysicsBody(circleOfRadius: 50)

            let actionMove = SKAction.move(
                to: CGPoint(x: -1000 ,y: dragonNode.position.y),
                duration: 2.0)
            dragonNode.run(actionMove)
    }
}

1 个答案:

答案 0 :(得分:2)

您实际上并没有创建任何东西。

class ChaosScene: SKScene {
    var dragonNode: Dragon!

     override func didMove(to view: SKView) {
        dragonNode = Dragon()
        addChild(dragonNode)
    }
}

您必须先初始化SpriteNodes,然后才能将其添加到场景中

class Dragon: SKSpriteNode {  

    var dragonNode: SKSpriteNode!

    init() {

        super.init(texture: nil, color: .clear, size: CGSize.zero)

        // Create Dragon
        dragonNode = SKSpriteNode(imageNamed: "dragon_2_fly_001")
        dragonNode.name = "dragon"
        dragonNode.physicsBody = SKPhysicsBody(circleOfRadius: 50)
        addChild(dragonNode)

        let actionMove = SKAction.move(to: CGPoint(x: -1000 ,y: dragonNode.position.y), duration: 2.0)
        dragonNode.run(actionMove)
    }
}