2016-10-08 2 views
1

У меня есть спрайт в моем редакторе сцен, который называется «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' 

я понял ошибку, это очень ясно, но я не найти способ, чтобы избежать этого.

ответ

3

Вы берете оригинальное тело и надеваете его на 2 узла. Вы не можете это сделать.

Насколько я помню, physBody теперь копируется в команду копирования (это не всегда). Таким образом, вам не нужно будет переводить оригинал. Если он не копирует, а затем сделать:

node.physicsBody = self.physicsBody.copy()

+0

невероятно, он не копирует настройки physicsBody, когда вы делаете глубокий копия, это кажется. (конец 2017 года). Как смешно. – Fattie

Смежные вопросы