API-агностик Vector3, Matrix и т. Д.? - PullRequest
4 голосов
/ 14 марта 2011

Я стараюсь, чтобы моя игровая логика не зависела от API.При этом я не хочу использовать Vector3-структуру Unity3D или XNA и т. Д. Каков наилучший способ сделать это?Кажется, что было бы ужасно бросить вызов, если бы я свернул свою собственную структуру Vector3 и просто написал неявные конвертеры для различных реализаций API.

Есть ли лучшая практика для такого рода вещей?Я не могу попросить Microsoft, Unity и т. Д. Устроить пикник и придерживаться общего интерфейса.

Ответы [ 2 ]

3 голосов
/ 14 марта 2011

Похоже, что XNA и Unity реализации Vector3 действительно похожи, главное отличие заключается в случае имен свойств.Жаль, что нет способа реализовать свойства расширения.

Что вы можете сделать, это создать набор методов расширения вместе с некоторой условной компиляцией (#if UNITY_3_3 или #if XNA) и исключительноиспользуйте эти методы расширения для получения значений в вашем коде API.Это по-прежнему позволит вам передавать объект Vector3 без изменений в специфичный для платформы код, требующий Vector3 без тонны приведения.

2 голосов
/ 14 марта 2011

Исходя из моего опыта, я бы выбрал одну платформу для записи вашей логики, а затем, на другой платформе, создал бы соответствующую реализацию с преобразованиями в собственные типы платформы. Нет смысла разрабатывать и писать третью реализацию, а затем выполнять преобразования на обе платформы!

При всех равных платформах я бы предпочел XNA, поскольку вы можете получить реализацию с открытым исходным кодом из MonoGame или (в конце концов) ExEn и использовать ее.

Однако на практике, я думаю, вам лучше всего начать с платформы, на которой вы собираетесь разрабатывать (XNA или Unity), а затем создать слой совместимости, когда он вам действительно понадобится.

...