【问题标题】:App Crashing when loading Custom Class SKSpriteNode to SKScene将自定义类 SKSpriteNode 加载到 SKScene 时应用程序崩溃
【发布时间】:2018-06-29 17:36:13
【问题描述】:

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

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)
    }
}

【问题讨论】:

  • 崩溃日志是怎么说的?当您调用 addChild 时,dragonNode 是否已经实例化?
  • @Koen 线程 1:致命错误:在展开可选值时意外发现 nil
  • @Koen 我需要在场景中调用 createDragon 函数吗?
  • 好吧,在你调用 addChild 之前。
  • @Koen 我确实打电话给它,我收到同样的错误

标签: swift sprite-kit scenekit


【解决方案1】:

你实际上并没有创造任何东西。

class ChaosScene: SKScene {
    var dragonNode: Dragon!

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

您必须先初始化 SpriteNode,然后才能将它们添加到场景中

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)
    }
}

【讨论】:

  • 你的意思是 dragonNode.createDragon() 吗?因为我已经尝试过了,但仍然收到同样的错误。
  • 我收到此错误:无法将类型“()”的值分配给类型“龙!”
  • 您还需要更新 createDragon() 以返回一个 dragonNode。
  • @FrankBoccia 这不是继承 SKSpriteNode 的最佳方式。给我一点时间来编写和编辑我的答案
  • @RonMyschuk 谢谢你的帮助,我正在努力学习。让我的代码尽可能好。
猜你喜欢
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 2019-01-30
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 2019-09-25
相关资源
最近更新 更多