Кроссплатформенная разработка на C ++ / OpenGL ES (iOS / Android) [закрыто]

10

У меня уже есть достаточный опыт работы с C ++ и OpenGL, и я недавно решил попробовать разработку мобильных игр. После успешного создания простого Android-приложения OpenGL ES с использованием Java я исследовал способы нацеливания на Android и iOS с использованием как можно меньшего количества кода для переписывания. Я пытался использовать инструменты разработки кроссплатформенных приложений для Visual Studio 2015, но обнаружил, что они слишком новые и поэтому крайне недокументированы. Я мог бы создать проекты шаблонов, которые дала мне программа, но я не мог понять, как, используя эти шаблоны, я мог бы добавлять ресурсы в игру или обрабатывать ввод с сенсорного экрана.

У меня, к сожалению, особое желание, слишком конкретное, чтобы найти его в Google. Я хочу сделать игру OpenGL ES с использованием C ++, с тонкими платформо-зависимыми обертками для Android и iOS. Люди задавали мне подобные вопросы (хотя и не совсем одинаковые), и несколько человек ответили, что то, что я хочу сделать, не только возможно, но и относительно просто, поскольку мне не нужно беспокоиться об интерфейсе пользователя.

Я пробовал этот урок , но ему почти три года, и, вероятно, он предназначен для более старых технологий, и в результате я столкнулся с различными неучтенными ошибками. На данный момент, тем не менее, этот учебник - самая близкая вещь к тому, что я хочу, что я нашел. Все остальное либо только для Android, либо я рекомендую платить сотни долларов в год за использование Marmalade SDK. Иногда я чувствую, что просто пишу код дважды, один раз на Java и один раз в Objective-C, но меня мотивирует знание того, что это решение возможно, но по какой-то причине нигде не освещено в современных деталях.

Подводя итог, я хочу сделать игру OpenGL ES для iOS и Android с единой базой кода C ++, обернутой в небольшие объемы кода, специфичного для платформы. Однако, несмотря на то, что несколько человек рекомендовали этот подход, никто не может сказать мне, как это сделать. Может кто-нибудь сказать мне, если это действительно возможно, и если да, что я могу сделать или куда я могу пойти, чтобы узнать, как?

Крейг Хорвуд
источник
попробуйте cocos2d-x или unity3d
Ali1S232
1
Unity3d далека от того, о чем просит OP, поскольку у вас нет доступа к источнику. Я использовал cocos2d-x, и проблемы с компиляцией все еще существуют. Влияние Objective-C ощущается также, некоторым это может понравиться, но для меня это выключение. Однако это решение с открытым исходным кодом, поэтому, возможно, стоит потратить время на расследование.
Мэтью Сандерс

Ответы:

6

Вы можете найти мой ответ на подобный вопрос здесь полезным.

Вам также может быть полезно изучить исходный код других решений. Годо двигателя , например , является кросс - платформенный с открытым исходным кодом движок игры , так что вы никогда не должны ничего платить.

Как я уже упоминал в моем другом ответе, вам не нужно (и, вероятно, вы не можете) полагаться на одну IDE, которая сделает всю работу за вас. CMake , Scons и многие другие инструменты сборки могут помочь с процессом кросс-компиляции / сборки на разных платформах и IDE.

Год двигатель , например, использует Scons и LLVM проект (аку рамок компилятора используется лязг на C / C ++ / Objective-C компилятора) использует CMake .

Популярный подход к играм заключается в создании движка на C / C ++ и, как вы упоминаете, абстрагирование от особенностей платформы. Когда дело доходит до iOS и Android, это логика управления жизненным циклом, которая взаимодействует с ОС. Если вы хотите пройти лишнюю милю и использовать Emscripten для компиляции в asm.js и реализовать почти нулевую скорость в браузере, вы делаете нечто похожее с абстрагированием основного цикла за то, что составляет вызовы requestAnimationFrame .

Emscripten рекомендует использовать SDL, чтобы упростить процесс портирования, поскольку он может помочь абстрагироваться от особенностей платформы, но ничто не мешает вам сделать это самостоятельно (кроме множества исследований, отладки и т. Д.).

Если вы действительно, действительно сумасшедший, вы можете делать то, что я делаю, и писать свой собственный язык, используя возможности LLVM для компиляции в родной C ABI или даже JIT на поддерживаемых платформах.

Дело в том, что да, это действительно возможно, но некоторые дороги более сложны / трудоемки, чем другие.

Примечание: вам, вероятно, понадобится использовать Mac OSX через Mac, Для компиляции в iOS VM или Hackintosh с XCode . Это одна из многих причин, по которым я считаю Macbook Pro отличным кандидатом на разработку системы.

Примечание 2: Стоит отметить, что многие кроссплатформенные движки сегодня используют языки сценариев для логики конкретной игры. Например, Unity даже не позволяет вам просматривать их исходный код (хотя вы можете писать собственные плагины). Это может помочь ускорить циклы разработки, а также свести к минимуму портирование, поскольку языки сценариев довольно независимы от платформы (особенно интерпретируемые языки, работающие в ВМ). Цель моего языка - разрешить как JIT (в основном для экономии времени разработки), так и статическую компиляцию.

Примечание 3: Если вы еще не узнали это. Если вы не используете SDL или какое-либо другое решение, которое абстрагирует специфику платформы, вам нужно будет использовать специфичные для каждой платформы функции взаимодействия C / C ++. С iOS это довольно просто в XCode, так как компилятор (clang, как упомянуто выше) уже поддерживает C / C ++. С Android вам нужно использовать NDK вызовы и маршалла между Java и C / C ++.

Мэтью Сандерс
источник
1
Я посмотрел в исходный код двигателя Годо. Это кажется немного чрезмерным; Я предпочел бы создать свой собственный без функций, которые мне не нужны. Я не совсем уверен, как это сделать, хотя. Я еще не смог успешно запустить любой код C ++ на Android.
Крейг Хорвуд
хе-хе ... Я не NDK пикник. Честно говоря, я нахожу что-нибудь Google, чтобы нуждаться в некоторой помощи в категории дружелюбия разработчика. Использование SDL запрещено для вас? У меня гораздо больше информации, и я могу обновить ответ, если это будет необходимо.
Мэтью Сандерс
SDL не запрещен, но я бы предпочел не ходить туда. Еще раз, всегда есть что-то невероятное, что это можно было бы сделать без рамок.
Крейг Хорвуд
Меня постоянно укусила эта ошибка, поэтому я знаю, что ты чувствуешь. Я использовал NDK в прошлом, и я не думаю, что многое изменилось в способе установки и компиляции. Я очень надеюсь, что отладка улучшилась, так как раньше вам приходилось использовать GDB напрямую через терминал, и IDE не поддерживала его, но похоже, что они начали добавлять поддержку NDK в android studio . Вы пробовали пример hellojni ?
Мэтью Сандерс
НДК является одним из самых отвратительных вещей в существовании, вы могли бы найти bgfx полезным в качестве справочного github.com/bkaradzic/bgfx , это не такой тонкий , как вы хотели бы , хотя, он имеет несколько движки рендеринга
JBeurer