加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 如何使用SKPhysicsBody复制SKSpriteNode?

发布时间:2020-12-14 05:38:30 所属栏目:百科 来源:网络整理
导读:我很好奇今天遇到的一种情况,当我尝试将SKSpriteNode从一个SKScene解压缩并复制到另一个SKScene时.在下面的游乐场的输出中你可以看到在复制之后还是没有维护linearDamping和angularDamping(它们似乎都回退到默认值) // PLAYGROUND_SW1.2 - SKSpriteNode Copy
我很好奇今天遇到的一种情况,当我尝试将SKSpriteNode从一个SKScene解压缩并复制到另一个SKScene时.在下面的游乐场的输出中你可以看到在复制之后还是没有维护linearDamping和angularDamping(它们似乎都回退到默认值)
// 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

游乐场输出

我不确定我是否正确地复制了这个,SKSpriteNode和SKPhysicsBody都符合NSCopying如果你看一下上面的输出,就会在复制之后保留area属性,据我所知,这是基于创建SKPhysicsBody时指定的大小.

任何人都可以对此有所了解并且可能会向我提供一个关于我应该如何深度复制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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读