У меня уже есть достаточный опыт работы с 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 ++, обернутой в небольшие объемы кода, специфичного для платформы. Однако, несмотря на то, что несколько человек рекомендовали этот подход, никто не может сказать мне, как это сделать. Может кто-нибудь сказать мне, если это действительно возможно, и если да, что я могу сделать или куда я могу пойти, чтобы узнать, как?
Ответы:
Вы можете найти мой ответ на подобный вопрос здесь полезным.
Вам также может быть полезно изучить исходный код других решений. Годо двигателя , например , является кросс - платформенный с открытым исходным кодом движок игры , так что вы никогда не должны ничего платить.
Как я уже упоминал в моем другом ответе, вам не нужно (и, вероятно, вы не можете) полагаться на одну 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 ++.
источник