ستوفر لك لعبة الفيديو F1 2020 حزمة بيانات UDP على شكل مصفوفة بايت ( byte[]
). هناك عدة أنواع مختلفة من حزم البيانات التي ستبثها اللعبة. قم باستيراد مساحة الاسم التالية لاستخدام الموارد الأساسية لقراءة البيانات:
using Codemasters.F1_2020;
كل نوع حزمة مشتق من نفس الفئة الأساسية، Packet
. تحتوي فئة Packet
على الخصائص التالية:
PacketFormat
- يصف اللعبة التي تنتمي إليها الحزمة (F1 2020)
GameMajorVersion
- الإصدار الرئيسي من اللعبة في وقت البث
GameMinorVersion
- الإصدار الثانوي من اللعبة في وقت البث
PacketVersion
PacketType
- نوع حزمة هذه البيانات (أي القياس عن بعد، والحالة، وبيانات الدورة، وما إلى ذلك)
UniqueSessionId
- المعرف الفريد لجلستك.
SessioTime
- الطابع الزمني للجلسة الحالية التي تم فيها تسجيل هذه الحزمة وبثها.
FrameIdentifier
- مجموعة الحزم التي تنتمي إليها هذه البيانات.
PlayerCarIndex
- فهرس سيارة اللاعب في المصفوفات الميدانية في جميع الحزم المقابلة.
SecondaryPlayerCarIndex
- إذا كنت تلعب بلاعبين (شاشة مقسمة)، فسيكون هذا هو فهرس اللاعب 2 في مصفوفة الحقل.
لمعرفة نوع الحزمة التي تم توفيرها لك، استخدم CodemastersToolkit. سيأتي متغير bytes
أدناه من بث القياس عن بعد، أو من ملف تم إلغاء تسلسله إذا قمت بحفظ القياس عن بعد على القرص.
byte[] bytes; //Your telemetry data package
PacketType pt = CodemastersToolkit.GetPacketType(bytes);
Console.WriteLine(pt.ToString());
مخرجات وحدة التحكم لما سبق: "CarTelemetry"
وبما أننا نعلم أن حزمة البيانات هذه هي حزمة قياس عن بعد، فيمكننا إنشاء حزمة قياس عن بعد:
TelemetryPacket tp = new TelemetryPacket();
tp.LoadBytes(bytes);
تحتوي فئة TelemetryPacket
على مصفوفة من CarTelemetryData
، واحدة لكل سيارة في الحقل.
على سبيل المثال، سيطبع الكود أدناه ضغط الخانق الذي يطبقه كل سائق في لحظة بث هذه البيانات.
foreach (TelemetryPacket.CarTelemetryData ctd in tp.FieldTelemetryData)
{
Console.WriteLine(ctd.Throttle.ToString());
}
تتبع العديد من الحزم تنسيقًا مشابهًا كما هو موضح أعلاه مع TelemetryPacket
.
يمكنك تحويل كافة حزم مجموعة البايت التي تلقيتها. مثال:
List<byte[]> telemetry;
Packet[] packets = CodemastersToolkit.BulkConvertByteArraysToPackets(telemetry);
يمكنك بعد ذلك تحويل كل حزمة من مجموعة الحزم التي تم إرجاعها. على سبيل المثال، تحويل Packet
إلى TelemetryPacket
:
foreach (Packet p in packets)
{
if (p.PacketType == PacketType.CarTelemetry)
{
TelemetryPacket telpack = (TelemetryPacket)p;
}
}
قد تحتاج، على سبيل المثال، إلى العثور على CarStatusPacket
المصاحب لحزمة TelemetryPacket
معينة. للقيام بذلك:
TelemetryPacket telpack;
CarStatusPacket csp = (CarStatusPacket)telpack.GetRelatedPacket(packets, PacketType.CarStatus);
**إذا كنت قد استخدمت سابقًا مساحة الاسم Codemasters.F1_2020.Analogy ووجدتها الآن مفقودة: فقد تم نقل مساحة اسم التحليل ضمن حزمة ApexVisual.F1_2020 NuGet (https://www.nuget.org/packages/ApexVisual.F1_2020/)