Міжплатформна розробка C ++ / OpenGL ES (iOS / Android) [закрито]


10

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

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

Я спробував цей підручник , але він майже три роки, і тому, ймовірно, розроблений для старих технологій, і в результаті я зіткнувся з різними незвіданими помилками. Наразі цей підручник є найближчим до того, що я хочу, щоб я знайшов. Все інше - це лише Android, або рекомендують платити сотні доларів на рік, щоб користуватися SDM Marmalade. Часом мені здається просто написати код два рази, один раз на Java і один раз в Objective-C, але мене мотивує знання, що це рішення можливе, але чомусь ніде не висвітлено жодної сучасної деталі.

Підводячи підсумок, я хочу зробити гру OpenGL ES для iOS та Android, з єдиною базою кодів C ++, загорнутий у невелику кількість коду, що залежить від платформи. Однак, незважаючи на те, що кілька людей рекомендували такий підхід, ніхто не може сказати мені, як це зробити. Хтось може мені сказати, чи це насправді можливо, і якщо так, то що я можу зробити або куди можна піти, щоб навчитися?


спробуйте cocos2d-x , або une3d
Ali1S232

1
unit3d - це далеко не те, що задає ОП, оскільки у вас немає доступу до джерела. Я використовував cocos2d-x, і проблеми з компіляцією все ще є певною мірою. Також відчувається вплив Objective-C, деяким це може подобатися, але для мене це відключення. Однак це рішення з відкритим кодом, тому, можливо, варто, щоб ОП часу вивчили.
Меттью Сандерс

Відповіді:


6

Ви можете знайти мою відповідь на подібне запитання тут .

Також вам може бути корисним вивчити вихідний код інших рішень. Наприклад, Godot Engine - це крос-платформний ігровий движок з відкритим кодом, тому ніколи не потрібно нічого платити.

Як я вже згадував у своїй іншій відповіді, вам не потрібно (і, швидше за все, не можна) покладатися на одну IDE, щоб зробити роботу за вас. CMake , Scons та багато інших інструментів збирання можуть допомогти в процесі перехресної компіляції / складання на платформах та IDE.

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

Популярний підхід для ігор - це побудова двигуна в C / C ++ і, як ви вже згадуєте, абстрактні особливості виїзної платформи. Що стосується iOS та Android, то ця логіка управління життєвим циклом взаємодіє з ОС. Якщо ви хотіли пройти додаткову милю і використовувати Emscripten, щоб також компілювати на asm.js і реалізовувати близьку швидкість в браузері, ви робите щось подібне, відбираючи основний цикл, що означає, що вимагає callAnimationFrame дзвінків.

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

Якщо ви справді, дуже божевільні, ви можете робити те, що я роблю, і писати власну мову, використовуючи потужність LLVM для компіляції на рідну мову C ABI або навіть JIT на підтримуваних платформах.

Справа в тому, що так, це дійсно можливо, але деякі дороги складніші / забирають багато часу, ніж інші.

Примітка: Ви, ймовірнопотрібно використовувати Mac OSX через Mac, VM , або Hackintosh з XCode , щоб компілювати прошивку. Це одна з багатьох причин, які я вважаю Macbook Pro відмінним кандидатом у систему розвитку.

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

Примітка3: Якщо ви цього ще не знайшли. Якщо ви не використовуєте SDL або якесь інше рішення, яке абстрагує особливості платформи, вам потрібно буде використовувати спеціальні функції взаємодії C / C ++ кожної платформи. З iOS це досить просто в XCode, оскільки компілятор (clang, як згадувалося вище) вже підтримує C / C ++. За допомогою Android потрібно використовувати NDK та здійснювати спільні дзвінки між Java та C / C ++.


1
Я заглянув у вихідний код двигуна Godot. Це здається трохи надмірним; Я вважаю за краще створити власну без функцій, які мені не потрібні. Я не зовсім впевнений, як це зробити. Мені ще не вдалося успішно запустити жодний код C ++ на Android.
Крейг Горвуд

хе-хе ... я, NDK, це не пікнік. Чесно кажучи, я знаходжу що-небудь у Google, щоб мені знадобилася допомога в категорії зручності для розробників. Чи використовуєте ви відключені ліміти SDL для вас? У мене є набагато більше інформації, з якою я можу оновити відповідь, якщо потрібно.
Меттью Сандерс

SDL не за межами, але я вважаю за краще не їздити туди. Знову ж таки, завжди є той химерний трішки знань, що це можна було б зробити без рамки.
Крейг Хорвуд

Мене постійно кусає ця помилка, тому я знаю, як ви себе почуваєте. Раніше я використовував NDK, і я не думаю, що багато чого змінилося в способі налаштування та компіляції. Я впевнений, що налагодження покращилось, оскільки вам довелося використовувати GDB безпосередньо в минулому через термінал, і IDE не підтримував його, але це здається, що вони почали додавати підтримку NDK до студії Android . Ви пробували приклад hellojni ?
Меттью Сандерс

NDK - одна з найбільш огидних речей, що існують. Ви можете знайти bgfx корисним як довідник github.com/bkaradzic/bgfx , він не такий тонкий, як ви могли б
хотіти
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.