gpt4 book ai didi

swift - 如何用 SKPhysicsBody 复制 SKSpriteNode?

转载 作者:搜寻专家 更新时间:2023-10-30 22:09:04 25 4
gpt4 key购买 nike

我很好奇我今天在尝试取消存档并将 SKSpriteNode 从一个 SKScene 复制到另一个时遇到的情况。在下面 playground 的输出中,您可以看到 linearDampingangularDamping 或在复制后没有得到维护(它们似乎正在回落到默认值)

// 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 输出 enter image description here

我不确定我是否正确复制了它,SKSpriteNodeSKPhysicsBody 都符合 NSCopying 如果您查看上面的输出area 属性在复制后保持不变,据我所知,这是基于创建 SKPhysicsBody 时指定的 size

任何人都可以阐明这一点,并可能为我提供有关我应该如何深度复制 SKSpriteNode 的指示吗?

最佳答案

我采取一种方法来解决你的问题,可能不是最好的方法,但是

   //COPY
let spriteCopy = spriteNode.copy() as SKSpriteNode
let physicsCopy:SKPhysicsBody = spriteNode.physicsBody!;

...
//COPY PHYSICS BODY HARD MODE
spriteCopy.physicsBody = physicsCopy;

为了解决这个问题,我创建了一个扩展,@mogelbuster 建议覆盖默认的 copy(),听起来不错。

extension SKSpriteNode
{
override open func copy() -> Any {
let node = super.copy() as! SKSpriteNode;
node.physicsBody = super.physicsBody;
return node;
}
}

使用这个扩展你可以做到,默认的copy()方法返回Any因为你需要转换为SKSpriteNode

// 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

IMAGE

关于swift - 如何用 SKPhysicsBody 复制 SKSpriteNode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28740031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com