我使用SpriteKit制作游戏。当两个特定类型的精灵碰撞时,我想记下其中一个精灵,然后在游戏中稍后更新该精灵。
使用指针,我基本上会做以下事情。当两个对象发生碰撞时,我会设置一些全局指针,指向我想要跟踪的精灵的地址。然后,当调用修改函数时,它将修改在该地址指向的任何内容,实质上修改碰撞的精灵。
我宁愿不使用指针,因为Swift不鼓励直接访问内存。我不能通过引用修改函数来传递精灵,因为我的代码不会调用修改函数(didSimulatePhysics)。
谢谢!
答案 0 :(得分:2)
您可以使用.unshare()
和.copy()
:
var valueA = [1,2,3,4]
var valueB = valueA
现在,如果您更改valueA,则valueB也将更改:
valueA[1] = 4 // valueA and valueB are now equal to [1,4,3,4]
但是如果我们使用.unshare()
方法:
valueB.unshare()
然后valueB不共享,所以如果我们改变valueA,valueB将不会改变:
valueA[1] = 2 \\ valueA == [1,2,3,4] && valueB == [1,4,3,4]
或者您可以使用.copy()
方法:
var valueC = valueA.copy()
它与:
相同var valueC = valueA
valueC.unshare()