В настоящее время я пишу объектно-ориентированную игру с мультиплеер. Игрока наследует от объекта, и когда я шлю текущие игрок свойство черезC# Lidgren Library - Отправить playerdata
NetOutgoingMessage outmsg = Server.CreateMessage(); [...] outmsg.WriteAllProperties(p);
где р мой объект игрока, мои клиенты получают только те свойства, которые объявлены в классе игроков, а не от класса объекта. Поэтому мои клиенты не могут обновить позиции игроков и т. Д.
Любые советы?
редактировать:
Он признает, наследуемые предметы, но он не посылает их должным образом. Я думаю, мне, возможно, придется использовать некоторые Bindingflags, поскольку есть опция для него, и должно быть возможно отправить объекты, которые также выделены игроку. Я использую класс Vector2 для указания позиции и скорости моего плеера, но мой клиент либо не может получить класс Vector2, либо сервер не может его отправить. Если я использую целые числа, строки, булевы или что-то, что он работает, но не с пользовательскими классами.
Lidgren по-прежнему довольно низкоуровневая сетевая библиотека.Это не то, что вы просто подключаете к своей игре, и это делает вашу игру многопользовательской (в отличие, скажем, от сети Unity 3D). Определите свои собственные сообщения. Будьте как можно более конкретными, никогда не отправляйте то, что вам не нужно отправлять. Сеть очень сложная, и, хотя Лидгрен спасает вас от многих из этих проблем, это не поможет вам в этом много сделать с многопользовательской игрой. Игры в реальном времени, в частности, очень сложно сделать правильно, особенно если они основаны на твитах. Делайте работу с примитивами - отправляйте эти векторы в виде двух 'float' и т. Д. – Luaan
Перед тем, как я увидел ваш комментарий, я подумал точно так же. Я напишу свой собственный писатель сейчас, спасибо за ответ. – besplash
Это действительно сводится к производительности, в основном. Игровые сообщения обычно не являются самоописательными (в отличие, скажем, с SOF-сообщениями WCF), потому что это тратит пространство и латентность. Если вы хотите что-то помочь вам в построении протоколов сообщений, «protobuf» очень полезно - он позволяет использовать конструкции «более высокого уровня», такие как списки, необязательные параметры, строки и т. Д. У него есть некоторые накладные расходы (естественно), но isn «Трудно использовать. Вы можете сериализовать структуру protobuf в массив байтов и отправить ее напрямую с помощью Lidgren. Но вы по-прежнему отправляете сообщения типа «обновление позиции игрока 1 (1, 1)». – Luaan