如何在设备之间传输SKAction?

时间:2018-07-22 23:34:28

标签: swift sprite-kit nsdata

我正在尝试在设备之间发送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 { $0.pointee }
}

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

2 个答案:

答案 0 :(得分:1)

您不必发送整个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)

答案 1 :(得分:-2)

如果您希望它撞到某些东西或使其更具活动性,则可以使其物理上 这样,尝试使用

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

enter image description here

我不确定,但我希望它能起作用;