如何复制SKSpriteNode与SKPhysicsBody? [英] How to copy SKSpriteNode with SKPhysicsBody?
问题描述
我很好奇今天遇到的情况,当试图取消归档并复制 SKSpriteNode
从一个 SKScene
到另一个。在下面的playground的输出中,你可以看到 linearDamping
和 angularDamping
或者在复制后不被维护
I am curious about a situation that I came across today when trying to unarchive and copy a SKSpriteNode
from one SKScene
to another. In the output from the playground below you can see that both linearDamping
and angularDamping
or not being maintained after the copy (they seem to be dropping back to default values)
// PLAYGROUND_SW1.2 - SKSpriteNode Copy
import UIKit
import SpriteKit
// ORIGINAL
let spriteNode = SKSpriteNode()
spriteNode.name = "HAPPY_NODE"
let size = CGSize(width: 55.0, height: 150.0)
let physics = SKPhysicsBody(rectangleOfSize: size)
physics.linearDamping = 0.123
physics.angularDamping = 0.456
spriteNode.physicsBody = physics
// COPY
let spriteCopy = spriteNode.copy() as! SKSpriteNode
// ORIGINAL
spriteNode.name
spriteNode.physicsBody?.linearDamping
spriteNode.physicsBody?.angularDamping
spriteNode.physicsBody?.area
// COPY
spriteCopy.name
spriteCopy.physicsBody?.linearDamping
spriteCopy.physicsBody?.angularDamping
spriteCopy.physicsBody?.area
PLAYGROUND OUTPUT
PLAYGROUND OUTPUT
我不确定我是否正确复制, SKSpriteNode
和 SKPhysicsBody
符合 NSCopying
如果你看看 / code>属性在复制后保持,据我所知,这是基于
size
指定时 SKPhysicsBody
已创建。
I am not sure that I am copying this correctly, both SKSpriteNode
and SKPhysicsBody
conform to NSCopying
If you look at the output above the area
property is maintained after the copy and to my knowledge this is based on the size
specified when the SKPhysicsBody
was created.
任何人都可以对此进行一些调整,并且可能提供一个指针,如何深度复制 SKSpriteNode
Can anyone cast some light on this and maybe provide me with a pointer as to how I should be deep copying an SKSpriteNode
?
推荐答案
我采取一种方法来解决您的问题,可能不是最好的方法,但
I take one way to resolve your problem, probably is not the best way, but
//COPY
let spriteCopy = spriteNode.copy() as SKSpriteNode
let physicsCopy:SKPhysicsBody = spriteNode.physicsBody!;
...
//COPY PHYSICS BODY HARD MODE
spriteCopy.physicsBody = physicsCopy;
为了解决这个问题,我创建了一个扩展。
To fix this problem, I created one extension.
extension SKSpriteNode
{
func copyWithPhysicsBody()->SKSpriteNode
{
let node = self.copy() as SKSpriteNode;
node.physicsBody = self.physicsBody;
return node;
}
}
使用此扩展程序,您可以执行
With this extension you can do it
// COPY
let spriteCopy = spriteNode.copyWithPhysicsBody();
// ORIGINAL
spriteNode.name
spriteNode.physicsBody?.linearDamping
spriteNode.physicsBody?.angularDamping
spriteNode.physicsBody?.area
// COPY
spriteCopy.name
spriteCopy.physicsBody?.linearDamping
spriteCopy.physicsBody?.angularDamping
spriteCopy.physicsBody?.area
这篇关于如何复制SKSpriteNode与SKPhysicsBody?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!