【发布时间】:2018-04-03 06:55:31
【问题描述】:
这似乎令人难以置信,但是,
let pb = model.physicsBody?.copy() as! SKPhysicsBody
print("orig .. \(model.physicsBody!.linearDamping)")
print("pb .. \(pb.linearDamping)")
它们不一样。真的没有。
这太奇怪了,我一定是做错了什么。我做错了什么?
除了手动复制所有属性并随着代码的发展而永久维护代码之外,如何做到这一点??
如果有人需要,这里有一个 dupe-qualities 功能,可以节省打字。 (这是 2017 年的——当然,随着 Apple 不断增加品质,它必须永远保持下去。)
extension SKSpriteNode
{
func dupe() -> Any {
// annoyingly, Apple does not provide a dupe function as you would use
// when spawning from a model.
let c = self.copy() as! SKSpriteNode
c.physicsBody = self.physicsBody!.copy() as? SKPhysicsBody
c.physicsBody?.affectedByGravity = self.physicsBody!.affectedByGravity
c.physicsBody?.allowsRotation = self.physicsBody!.allowsRotation
c.physicsBody?.isDynamic = self.physicsBody!.isDynamic
c.physicsBody?.pinned = self.physicsBody!.pinned
c.physicsBody?.mass = self.physicsBody!.mass
c.physicsBody?.density = self.physicsBody!.density
c.physicsBody?.friction = self.physicsBody!.friction
c.physicsBody?.restitution = self.physicsBody!.restitution
c.physicsBody?.linearDamping = self.physicsBody!.linearDamping
c.physicsBody?.angularDamping = self.physicsBody!.angularDamping
c.physicsBody?.categoryBitMask = self.physicsBody!.categoryBitMask
c.physicsBody?.collisionBitMask = self.physicsBody!.collisionBitMask
c.physicsBody?.fieldBitMask = self.physicsBody!.fieldBitMask
c.physicsBody?.contactTestBitMask = self.physicsBody!.contactTestBitMask
return c
}
}
(只是一个人的意见,我觉得最好不要仅仅覆盖 NSCopy,因为整个事情是一个敏感的问题,为了下一位工程师,最好简单明了。这是很常见的“将游戏对象的品质欺骗”另一个游戏对象,所以,这很好。)
【问题讨论】:
-
这与 SKPhysicsBody 作为 PKPhysicsBody 的包装类有关,他们执行得很差,SKPhysicsBody 在哪里复制,但它创建了一个新的 PKPhysicsBody。您也许可以扩展和覆盖复制功能来修复它
-
无论如何很高兴知道,事实上,它不会复制值,它不会克隆:/ 我想这就是生活
-
我注意到 iOS 中物理体的另一个问题是,你不能仅仅在类别之间“改变”(体积/边缘等)。这不是不合理的,但实际上,对我来说,在那种情况下,他们将它们归为同一类是非常令人困惑的。它应该只是 SKPhysicsBody(即“A body”)和 SKPhysicsTrigger - 或它们拥有的任何其他东西。
-
这里没有错字,
PKPhysicsBody来自PhysicsKit,这是一个我们无法访问的私有框架。SKPhysicsBody创建一个PKPhysicsBody实体,所以当你复制时。它正在创建一个新的PKPhysicsBody实体,而不是复制现有的。 -
啊!请原谅我没有注意到 P - 谢谢,太棒了
标签: swift sprite-kit skspritenode skphysicsbody spawning