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

Наскоро започнах малък проект. Измислихме малка игра и сега я изграждаме. Един от най-важните аспекти е, че работи на Windows, Linux и OSX.

За да опростя нещата за малко, реших да започна разработката на Windows и да конвертирам играта в Linux по-късно, очаквайки малки проблеми; доверие на рамката MonoGame. Сега съм в този процес на пренасяне, но спрях много бързо, тъй като се натъкнах на основен проблем:

Не можете да имате едновременно Windows Game и Linux игра в едно и също решение, то няма да работи.

Разбрах, че трябва да стартирате нов Linux MonoGame проект и просто да копирате и поставите кода в него. (Което е ужасен начин за управление на всеки проект).

Работа с git; Стигнах до следното

  1. Игнорирайте промените във всички .sln файлове и т.н., като просто запазите кода в хранилището по такъв начин, че основната директория да е все още в папката на проекта "root".

  2. Съхранявайте целия код в подмодули и разклонете „главната“ папка на проекта в клонове на windows, linux, osx, за да запазите конфигурационните файлове на различните редактори.

Единственото нещо, което намерих с Google, беше за нещата, които току-що описах по-горе. Някой има ли опит с проблема, който описах, или просто трябва да опитам нещо и да видя дали е правилно?


person AmazingDreams    schedule 05.03.2014    source източник
comment
Не съм запознат с платформата, но не можете ли просто да създавате различни проекти, които използват връзки към едни и същи файлове?   -  person Amnon    schedule 05.03.2014
comment
@Amnon, просто си мислех за това... хаха, ще опитам веднага.   -  person AmazingDreams    schedule 05.03.2014
comment
@Amnon Изглежда, че не е опция, специфичните за проекта настройки се запазват в самата кодова база. Това означава, че изходните файлове все още ще бъдат компилирани като WindowsGL exe файл. Това, което не разбирам, е много ограничената документация от самия 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/

Или алтернативно, има по-усъвършенстван подход, използващ Portable Class Libraries (въпреки че все още не се поддържа официално). Имам описание как работи това в моя блог.

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 разширява CoreGame разширява (XNA)Game. Получавам Object reference not set to an instance of an object, когато CoreGame конструктор извиква Game конструктор. Някакви идеи? - person AmazingDreams; 09.03.2014
comment
Това е доста общо изключение, въпреки че, ако трябва да гадая, бих казал, че може да препращате към грешен DLL от всеки проект. Обърнете внимание, че всеки платформен проект трябва да препраща към своята специфична за платформата MonoGame DLL, а преносимият проект трябва да препраща към библиотеката MonoGame Portable. Това е странна конфигурация, но работи. - 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). „Поддръжката“ от самия екип на моноиграта е "We supply alpha windows packages" и не ми се иска да управлявам цялото дърво на изходния код на MonoGame за обикновен бинарен файл на Linux. Започвам да се чувствам все повече и повече като преминавам към Java. - person AmazingDreams; 12.03.2014
comment
Реших засега да използвам/пробвам LibGDX (или подобен проект), докато MonoGame узрее повече. - person AmazingDreams; 13.03.2014