我的场景编辑器中有一个精灵,称为“redsprite”,带有一些物理属性。我真的想在下一次使用这个精灵。
我想“复制”这个精灵,保留他的物理属性,但是有一个新的位置。
let sprite:SKSpriteNode = (self.childNode(withName: "redsprite") as! SKSpriteNode).copyWithPhysicsBody()
sprite.position = CGPoint(x:100,y:100)
self.addChild(sprite)
我使用SKSpriteNode扩展名来复制精灵。
extension SKSpriteNode {
func copyWithPhysicsBody()->SKSpriteNode {
let node = self.copy() as! SKSpriteNode
node.physicsBody = self.physicsBody
return node
}
}
我有这个经典错误:
Terminating app due to uncaught exception 'Cant add body, already exists in a world', reason: 'Cant add body <SKPhysicsBody> type:<Rectangle> representedObject:[<SKSpriteNode> name:'redsprite' texture:['nil'] position:{100, 100} scale:{1.49, 1.40} size:{149.15391540527344, 140.06228637695312} anchor:{0.5, 0.5} rotation:0.00], already exists in a world'
我理解错误,非常清楚,但我找不到避免它的方法。
答案 0 :(得分:3)
您正在拍摄原始身体并将其放在2个节点上。你不能这样做。
据我所知,physicsBody现在被复制到复制命令中(它并不总是如此)。所以你不需要转移原来的身体。如果没有复制,请执行:
node.physicsBody = self.physicsBody.copy()