我正在尝试在设备之间发送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 }
}
这不起作用,实际上我只是在尝试...有人可以帮我重写正确的代码吗?我要生气了...
答案 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
我不确定,但我希望它能起作用;