Git, моноигра и кроссплатформенная разработка

Недавно я начал работу над небольшим проектом. Мы придумали небольшую игру и сейчас ее строим. Одним из наиболее важных аспектов является то, что он работает на Windows, Linux и OSX.

Чтобы немного упростить задачу, я решил начать разработку для Windows и позже преобразовать игру в Linux, ожидая небольших проблем; доверяя фреймворку MonoGame. Сейчас я нахожусь в процессе переноса, но очень быстро остановился, так как столкнулся с серьезной проблемой:

Вы не можете иметь в одном решении и игру для Windows, и игру для Linux, она не будет работать.

Я узнал, что вам нужно запустить новый проект Linux MonoGame и просто скопировать и вставить в него код. (Это ужасный способ управления любым проектом).

Работа с git; Я придумал следующее

  1. Игнорировать изменения во всех файлах .sln и т. д., просто сохраняя код в репозитории таким образом, чтобы базовый каталог все еще находился в «корневой» папке проекта.

  2. Храните весь код в подмодулях и разветвляйте «корневую» папку проекта на ветки windows, linux, osx, чтобы хранить файлы конфигурации разных редакторов.

Единственное, что я нашел в Google, это о том, что я только что описал выше. Есть ли у кого-нибудь опыт решения проблемы, которую я описал, или я должен просто попробовать что-то и посмотреть, правильно ли это делать?


person AmazingDreams    schedule 05.03.2014    source источник
comment
Я не знаком с платформой, но нельзя ли просто создавать разные проекты, в которых используются ссылки на одни и те же файлы?   -  person Amnon    schedule 05.03.2014
comment
@ Амнон, я как раз думал об этом .... лол, я попробую прямо сейчас.   -  person AmazingDreams    schedule 05.03.2014
comment
@Amnon Кажется, это не вариант, настройки для конкретного проекта сохраняются внутри самой кодовой базы. Это означает, что выходные файлы по-прежнему будут скомпилированы как исполняемый файл WindowsGL. Чего я не понимаю, так это очень ограниченной документации от самого Mono, скомпилированные файлы сохраняются в папке с именем bin/Debug/<platform>/<executable>, что дает мне представление о том, что можно иметь несколько конфигураций... но когда я пытаюсь найти некоторые параметры, ничего не получается. быть найденным.   -  person AmazingDreams    schedule 05.03.2014


Ответы (1)


По сути у вас есть 2 варианта. Либо используйте совместное использование кода, как описано в рекомендациях Xamarin здесь:

http://docs.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/sharing_code_options/

Или, наоборот, есть более продвинутый подход с использованием переносимых библиотек классов (хотя официально он еще не поддерживается). В моем блоге есть описание того, как это работает.

http://www.craftworkgames.com/blog/day-6-running-with-monogame-portable/

Ни одно из решений не является идеальным, но оба они лучше, чем копирование и вставка кода.

person craftworkgames    schedule 05.03.2014
comment
Спасибо за ваш ответ. Я вижу большой потенциал в вашем решении PCL, «официальные» материалы сразу же привели к решениям, о которых я уже думал, но думал, что их очень сложно поддерживать из-за символических ссылок, новых файлов и т. д. Ваше решение потребует некоторой работы, которую я делаю сейчас нет времени, вернусь к этому на выходных. - person AmazingDreams; 05.03.2014
comment
@AmazingDreams Да, есть много возможностей для улучшения. Я давно мечтал создать движок C#, который бы работал таким образом. Хотя довольно много времени. - person craftworkgames; 06.03.2014
comment
Я пытался добавить этот материал, и он компилируется! Однако я получаю исключение во время выполнения. Моя установка: LinuxGame extends CoreGame extends (XNA)Game. Я получаю Object reference not set to an instance of an object, когда конструктор CoreGame вызывает конструктор Game. Любые идеи? - person AmazingDreams; 09.03.2014
comment
Это довольно общее исключение, хотя, если бы мне пришлось угадывать, я бы сказал, что вы, возможно, ссылаетесь на неправильную DLL из каждого проекта. Обратите внимание, что каждый платформенный проект должен ссылаться на специфичную для платформы библиотеку DLL MonoGame, а переносимый проект должен ссылаться на переносимую библиотеку MonoGame. Странная конфигурация, но она работает. - person craftworkgames; 12.03.2014
comment
Ну, я думаю, что знаю, в чем проблема; MonoGame Portable = v3.1.3-alpha, MonoGame = v3.1.3-alpha, MonoGame.Binaries = v3.1.3-alpha еще не включают пакеты Linux. У меня есть net40, netcore и wp8. Debian не предоставляет версии выше 2.5.0sid). «Поддержка» со стороны самой команды monogame "We supply alpha windows packages", и мне не хочется управлять всем исходным деревом MonoGame для простого бинарного файла Linux. Мне все больше и больше хочется перейти на Java. - person AmazingDreams; 12.03.2014
comment
На данный момент я решил использовать / попробовать LibGDX (или аналогичный проект), пока MonoGame не станет более зрелым. - person AmazingDreams; 13.03.2014