Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何复制具有物理属性的精灵,然后将其添加到场景中?_Swift_Sprite Kit_Skspritenode_Skphysicsbody - Fatal编程技术网

Swift 如何复制具有物理属性的精灵,然后将其添加到场景中?

Swift 如何复制具有物理属性的精灵,然后将其添加到场景中?,swift,sprite-kit,skspritenode,skphysicsbody,Swift,Sprite Kit,Skspritenode,Skphysicsbody,我的场景编辑器中有一个精灵,名为“红色精灵”,具有一些物理属性。我真的很想用这个雪碧做下一个 我想“复制”这个精灵,保持它的物理属性,但有一个新的位置 let sprite:SKSpriteNode = (self.childNode(withName: "redsprite") as! SKSpriteNode).copyWithPhysicsBody() sprite.position = CGPoint(x:100,y:100) self.addChild(sprite) 我使用一个SK

我的场景编辑器中有一个精灵,名为“红色精灵”,具有一些物理属性。我真的很想用这个雪碧做下一个

我想“复制”这个精灵,保持它的物理属性,但有一个新的位置

let sprite:SKSpriteNode = (self.childNode(withName: "redsprite") as! SKSpriteNode).copyWithPhysicsBody()
sprite.position = CGPoint(x:100,y:100)
self.addChild(sprite)
我使用一个SKSpriteNode扩展来复制sprite

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'
由于未捕获的异常而终止应用程序“无法添加实体,已存在于世界中”,原因:“无法添加实体类型:representedObject:[名称:'redsprite'纹理:['nil']位置:{100100}比例:{1.49,1.40}大小:{149.15391540527344140.06228637695312}锚定:{0.5,0.5}旋转:0.00],已存在于世界中”

我理解这个错误,很明显,但我找不到避免它的方法。

您将原始实体放在两个节点上。你不能那样做

就我所记得的,physicsBody现在在copy命令中被复制(它并不总是这样)。因此,您不需要将原始实体转移过来。如果不复制,则执行以下操作:


node.physicsBody=self.physicsBody.copy()

令人难以置信的是,它不会复制physicsBody的设置,当您进行深度复制时,它似乎是。(2017年末)多么可笑。