如何在设备之间传输 SKAction?

How to transport SKAction between devices?

我正在尝试在设备之间发送 SKAction,但我遇到了一些问题...请帮帮我好吗?这是我发送它的代码:

let movment1 = SKAction.moveTo(x: 1600, duration: 0.25)
    car.run(movment1)
    var positionToSend = movment1
    let dataSend = Data(bytes: &positionToSend, count: MemoryLayout.size(ofValue: positionToSend))
    try match?.sendData(toAllPlayers: dataSend, with: GKMatchSendDataMode.reliable)

我是这样收到的:

func receiveDataP(position: Data, player: GKPlayer) {
    let _ : SKAction = position.withUnsafeBytes { [=11=].pointee }
}

这行不通,实际上我只是在尝试...有人可以帮我重写正确的代码吗?我生气了...

无需发送整个 SKAction,您可以只发送在其他设备中重新创建 SKAction 所需的必要信息。

在这里,我假设一个 SKAction 被描述为一个 x 值和一个 duration。如果 duration 总是 0.25 那么你不需要发送持续时间。

创建这样的东西:

struct SKActionDescriptor : Codable {
    let x: CGFloat
    let duration: Double
}

要创建要发送的数据,请使用 JSONEncoder:

let encoder = JSONEncoder()
let data = try! encoder.encode(SKActionDescriptor(x: 1600, duration: 0.25))

你可以在另一端使用 JSONDecoder:

let decoder = JSONDecoder()
let descriptor = try! decoder.decode(SKActionDescriptor.self, from: receivedData)

然后创建一个SKAction:

let action = SKAction.moveTo(x: descriptor.x, duration: descriptor.duration)

如果你想让它撞到一些东西或者让它更容易移动你可以在物理上让它 像那样并尝试使用

  Player.physicsBody?.velocity = CGVector(dx: 1600, dy: 0)
  Player.physicsBody?.angularVelocity = 0.25

enter image description here

我不确定,但我希望它有用;