gpt4 book ai didi

c# - 单点触控 : Sending/Receiving NSData Though GameKit

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:25:36 25 4
gpt4 key购买 nike

我正在尝试在我的 MonoTouch 游戏中实现配对。我已经成功地实现了通过 GameKit 连接玩家的系统,但我仍然无法发送和接收数据。

如何将此 Objective-C 代码转换为 C#?我要发送的数据类型是一个 Vector2 类,带有 XY 浮点组件。

NSError *error;
PositionPacket msg;
msg.messageKind = PositionMessage;
msg.x = currentPosition.x;
msg.y = currentPosition.y;
NSData *packet = [NSData dataWithBytes:&msg length:sizeof(PositionPacket)];
[match sendDataToAllPlayers: packet withDataMode: GKMatchSendDataUnreliable error:&error];

if (error != nil)
{
// handle the error
}

如有任何帮助,我们将不胜感激!

最佳答案

常见的方式,因为OpenTK.Vector2是用[Serializable]修饰的,将结构序列化为 Stream(例如 MemoryStream)然后从中初始化一个新的 NSData,例如使用 NSData.FromStream。这样做会产生相当多的开销,但它适用于任何结构。

更好地使用 Stream 是将您的值写入其中(例如使用 StreamWriter)。这消除了序列化开销(反射)并允许您从不同的值构建流(无需创建结构)。

MemoryStream ms = new MemoryStream ();
using (StreamWriter sw = new StreamWriter (ms)) {
sw.Write (v2.X);
sw.Write (v2.Y);
}
ms.Position = 0;
var data = NSData.FromStream (ms);

一种更复杂(但可能更快的方法)是使用不安全代码和NSData.FromBytes,它接受 IntPtr(指针)和数据大小。如果您的所有数据都已经在一个结构中,那么这很容易做到。

hacky 方法是将 Vector2 转换为 monotouch.dll 中已知的类型,例如F 点。这将允许您使用 NSData.FromObject。此 API 适用于 NSObject,最基本的值类型和 NSValue 支持的或添加到 monotouch.dll 中的一些基本类型,例如RectangleF, PointF, ...

var v2 = new OpenTK.Vector2 ();
var pt = new System.Drawing.PointF (v2.X, v2.Y);
var data = NSData.FromObject (pt);

关于c# - 单点触控 : Sending/Receiving NSData Though GameKit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10369144/

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