0
votes

Whats my problem: I get the Could not create physics body error when call the constructor SKPhysicsBody(texture: size:)

I am creating the physics body for my custom SKSpriteNode object in the required init(coder aDecoder: NSCoder) constructor, so I can design my game easily in the scene editor. I need the physics body to be created according to the texture I set to in the scene editor. Here is the code I have so far:

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


      }

As your can see the call 'texture: (self.scene?.view?.texture(from: SKSpriteNode(texture:self.texture)))!' is a supposed workaround I saw from another post with this same bug but it isn't working, probably from the latest update with xcode. The deserialization initializer assumes I've chose a texture in the scene editor for the Attachable object. Also Im doing the async thing because the joint needs to be created after one of the bodies is initialized. I will come up with a more elegant solution but thats outside the scope of this question.

Edit: I can set the alpha physicsbody in the scene editor, so thats a work around but I'd prefer to create the body in the class.

1

1 Answers

0
votes

This is a problem that seems to keep reoccurring. It's been discussed on the apple developer forums as well. It was supposed to have been fixed, but seems to have reappeared.