首页 > 解决方案 > Sprite Kit 无法创建物理体错误

问题描述

我的问题是什么: 调用构造函数 SKPhysicsBody(texture: size:) 时出现无法创建物理体错误

我在所需的 init(coder aDecoder: NSCoder) 构造函数中为我的自定义 SKSpriteNode 对象创建物理体,因此我可以在场景编辑器中轻松设计我的游戏。我需要根据我在场景编辑器中设置的纹理创建物理体。这是我到目前为止的代码:

    import Foundation
    import SpriteKit

    class Attachable : SKSpriteNode {
        init(texture: SKTexture, position: CGPoint, size: CGSize ) {
        super.init(texture: texture , color: UIColor.clear, size: size)
        self.position = position
    
        }
        required init(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)!
            DispatchQueue.main.asyncAfter(deadline: .now() + 0.03) {
       
        
            self.physicsBody = SKPhysicsBody(texture: (self.scene?.view?.texture(from: 
            SKSpriteNode(texture: self.texture)))!, size: self.size)
        
            let joint = SKPhysicsJointFixed.joint(withBodyA: self.physicsBody!, bodyB: (. 
            self.parent?.physicsBody)!, anchor: self.parent!.position)
            self.scene!.physicsWorld.add(joint)
            }
    
        }


      }

如您所见,调用'texture: (self.scene?.view?.texture(from: SKSpriteNode(texture:self.texture)))!' 是我从另一个具有相同错误的帖子中看到的假设解决方法,但它不起作用,可能来自 xcode 的最新更新。反序列化初始化程序假定我在场景编辑器中为 Attachable 对象选择了纹理。我也在做异步的事情,因为需要在初始化其中一个主体后创建关节。我会想出一个更优雅的解决方案,但这超出了这个问题的范围。

编辑:我可以在场景编辑器中设置 alpha 物理体,所以这是一种解决方法,但我更喜欢在类中创建身体。

标签: iosswiftxcodesprite-kit

解决方案


这是一个似乎不断重复出现的问题。苹果开发者论坛也对此进行了讨论。它应该已经修复,但似乎又出现了。


推荐阅读