如何复制SKSpriteNode与SKPhysicsBody? [英] How to copy SKSpriteNode with SKPhysicsBody?

查看:223
本文介绍了如何复制SKSpriteNode与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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆