Рендеринг в клиент-серверной игре, в которой используются те же классы

Поэтому я столкнулся с этой маленькой проблемой, работая над идеей маленькой онлайн-игры.

Вот простая идея о том, как это работает:
Клиент и сервер будут использовать одну и ту же реализацию «мира» — объекты симуляции физики. Допустим, у нас есть класс World, который содержит вектор WorldObjects. WorldObject является базовым классом для других производных классов (таких как PlayerObject, BoxObject, MonsterObject). Проблема здесь в том, как эффективно объявить пользовательские методы рендеринга для этих классов объектов. Например, PlayerObject должен отображаться иначе, чем BoxObject.

Следует помнить, что мы не можем просто создать виртуальный метод рендеринга, потому что это подразумевает, например, BoxObject должен #include «OpenGL.h», что НЕ МОЖЕТ быть сделано на стороне сервера (мы хотим, чтобы на стороне сервера не было графических библиотек).

Так как это можно сделать? Я придумал такую ​​идею: создать отдельный синглтон (только на стороне клиента), который будет содержать реализации методов рендеринга для различных типов объектов (например, идентифицированных перечислением), но разве это лучший способ сделать это? Знаете ли вы что-нибудь более эффективное и гибкое?

Конечно, мы здесь говорим о C ++, но если есть правило или практика, которую вы знаете и используете на другом языке, пожалуйста, поделитесь (вот почему я действительно не указал язык в посте). Благодарю.

0

Решение

Вы можете ввести типы, которые являются производными от PlayerObject и BoxObject, которые поддерживают рендеринг, например, PlayerObjectRenderable и BoxObjectRenderable (или, что более разумно, вы вводите интерфейс, такой как Renderable). Затем, когда вы создаете (или факторизуете) объекты для клиентской стороны, вы создаете экземпляры этих классов ObjectRenderable, а для серверной части вы используете более обобщенные. Когда дело доходит до рендеринга, вы предоставляете ссылки или указатели на интерфейс Renderable. Объекты фабричного строительства на стороне клиента также могут быть получены из обобщенного и т. Д.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]