Я только что завершил проект по одновременной / переносной разработке.Для 4 из 5 моих платформ я использую Monogame в качестве основы рендеринга (моя пятая - HTML5 Canvas).Вы можете увидеть мои результаты на http://unseenu.wikispaces.com/AnyGUI.
Мой опыт таков:
The Good:
Я начал с версии C # / JSIL для Canvas, так как она была самой большойнеизвестно.Мой первый порт после этого был OSX и Monogame.
Порт OSX прошел очень гладко.Я уже работал с Monogame раньше, поэтому мне понадобилось около недели, чтобы перенести слой рендеринга.
После этого буквально потребовалось несколько часов, чтобы запустить порт Windows OGL.
Потребовалось около 2 дней, чтобы запустить порт iOS.Около половины этого было связано с проблемами сборки и инструментами iOS.Другая половина работала с сенсорным вводом, поскольку это была моя первая мобильная платформа.
Я сейчас работаю над Android, и это первое место, где я вижу проблемы переносимости Monogame.Отсечение кажется выключенным.Кроме того, это было делом нескольких часов, и снова большую часть времени мы получали правильную среду сборки.Мне не нужно было никаких изменений кода.(Хотя эта проблема с обрезкой - проблема с ручкой.)
Плохо:
Я работаю на OSX, и инструменты могут быть немного прикольными.Самая большая проблема заключается в том, что поддержка MonaGame для Xamarin Studio / Monodevelop просто не работает на Mac.Это не такая большая проблема, как кажется.Шаблоны работают хорошо, что не работает, так это ссылки на библиотеки.Поэтому я только что скачал Monogame отдельно и меняю ссылки на библиотеки в каждом проекте на те, которые были загружены после создания проекта.Когда я научился это делать, у меня было несколько проблем с инструментами.
В общем, C # довольно плохо справляется с управлением версиями.Он очень требователен к библиотечным версиям, отчасти потому, что Microsoft не хотела беспокоиться о обратной совместимости .NET.
Это проявляется в попытках сделать многоплатформенную моногамную штуку.У меня было много горя с этим в прошлом.Несмотря на то, что API Monogame идентичен, когда вы компилируете в него код, который вставляет ссылку на библиотеки конкретной платформы для Monogame в ваш код.Это не так плохо, если это код приложения, поскольку приложения в любом случае нуждаются в собственной сборке для каждой платформы, но если вам нужны промежуточные библиотеки, это означает, что вам нужна отдельная сборка каждой промежуточной библиотеки для каждой платформы, что недопустимо.
Мое решение в этом проекте состояло в том, чтобы определить мой собственный интерфейс, который находится между моей игрой и моногеймом, чтобы я мог вводить реальный моногеймный код через внедрение зависимости во время выполнения.Со временем я напишу об этом на моем сайте более подробно.
Другой вопрос, конечно, заключается в том, что для разработки под эти платформы вам нужен Xamarin Mono для iOS и Android, а это стоит денег.
ТАК короткий ответ такой.В целом, это хороший API, и реализации между платформами в основном верны.Форма, в которой он находится, и инструменты, с которыми вам нужно работать, все еще немного грубые и могут немного огорчить вас.В конце концов, это ничем не отличается от любой другой игровой платформы, над которой я когда-либо работал.