2016-10-08 6 views
1

필자의 씬 에디터에는 물리 속성이있는 "redsprite"라는 스프라이트가 있습니다. 정말이 스프라이트를 다음에 사용하고 싶습니다.물리 속성으로 스프라이트를 복제 한 다음 장면에 추가하는 방법은 무엇입니까?

필자는이 스프라이트를 복제하여 물리 특성을 유지하면서 새로운 위치를 유지하고자합니다.

let sprite:SKSpriteNode = (self.childNode(withName: "redsprite") as! SKSpriteNode).copyWithPhysicsBody() 
sprite.position = CGPoint(x:100,y:100) 
self.addChild(sprite) 

스프라이트를 복사하려면 SKSpriteNode 확장을 사용합니다. 나는 그것을 피할 수있는 방법을 찾을 수없는 내가 오류를 이해

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' 

, 그것은 매우 분명하지만, :

extension SKSpriteNode { 
    func copyWithPhysicsBody()->SKSpriteNode { 
     let node = self.copy() as! SKSpriteNode 
     node.physicsBody = self.physicsBody 
     return node 
    } 
} 

나는이 고전적인 오류가 있습니다.

답변

3

원래 몸체를 가져 와서 2 개의 노드에 놓습니다. 그럴 수 없어.

필자가 기억하는 한, physicsBody는 이제 copy 명령으로 복사됩니다 (항상 그런 것은 아닙니다). 따라서 원래 몸을 옮길 필요가 없습니다. 이 복사되지 않는 경우, 다음을 수행하십시오 당신이 깊은 복사를 수행 할 때

node.physicsBody = self.physicsBody.copy()

+0

믿을 수 없을만큼, 그것은 physicsBody의 설정을 복사하지 않습니다, 그것은 보인다. (2017 년 말) 얼마나 웃겨. – Fattie