gpt4 book ai didi

ios - 如何使用 Game Center sendDataToAllPlayers 发送 UIBezierPath

转载 作者:行者123 更新时间:2023-11-28 12:54:32 31 4
gpt4 key购买 nike

我有一款游戏可以将数据从一个玩家发送到所有玩家。我不知道如何发送 UIBezierPath 对象。我正在将 UIBezierPath 对象存档到 NSData 中。

这是我用来发送和接收数据的数据结构:

struct DataStruct {
var action: Action = Action.Nil
var point: CGPoint = CGPoint(x: 0.0, y: 0.0)
var path: NSData = NSData()
var speed: CGFloat = 0.0
}

Struct 中没有 NSData,一切正常。有了它,我能够发送数据但无法接收和 getBytes()。我不知道如何编码和解码它。这是有道理的,因为 DataStruct 的 sizeof() 不是发送数据的正确大小。但我找不到这方面的例子。非常感谢任何示例或帮助。我在发送和接收数据方面经验有限。

这是我归档和发送它的函数:

func sendData(action: Action, point: CGPoint, path: UIBezierPath, speed: CGFloat, mode: GKMatchSendDataMode) {
// update player position, velocity and angle
let pathData = NSKeyedArchiver.archivedDataWithRootObject(path)
var dataStruct = DataStruct(action: action, point: point, path: pathData, speed: speed)
let data: NSData = NSData(bytes: &dataStruct, length: sizeof(DataStruct))
do {
try GameCenterMatch.sendDataToAllPlayers(data, withDataMode: mode)
print("data sent: \(dataStruct)")
} catch {
print("data sent error")
}
}

这是我接收它的函数的一部分:

    func match(match: GKMatch, didReceiveData data: NSData, fromRemotePlayer player: GKPlayer) {
if GameCenterMatch == match {
var dataStruct = DataStruct()
data.getBytes(&dataStruct, length: sizeof(DataStruct))
print("data received: \(player.displayName), data: \(dataStruct)")

最佳答案

我还没有这样做,但值得注意的是,当某些内容(路径)只是指向另一个字节数组的指针时,您发送的是一个字节数组。你会遇到与 String 相同的问题,因为 sizeOf DataStruct 是常量并且不包括引用内容的内容,如 NSData、String、对象等,只包括它们的指针。

您应该归档 DataStruct,然后在另一端发送并取消归档。

关于ios - 如何使用 Game Center sendDataToAllPlayers 发送 UIBezierPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35374022/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com