Игровая кросс-компиляция и упаковка

Некоторые друзья и я хотели разработать игру. Любой язык сделает. Я программировал в C в течение многих лет, но никогда не писал игру прежде. Один из нас знает SDL немного. Это также было бы хорошее оправдание изучить Python+pygame.

Мы хотим, чтобы наша игра была 'автономна'. Автономным я подразумеваю, что большинство пользователей (по крайней мере, Linux, Mac и Windows) не должно будет вручную загружать и устанавливать что-либо еще кроме пакета. Хорошо, если установка автоматически обрабатывает недостающие зависимости. Если пакеты содержат двоичные файлы, мы хотим смочь генерировать их использующий кросс-компиляцию из Linux.

Как мы должны упаковать и структурировать проект, и какой язык подходит лучше всего?

5
задан Giovanni Funchal 8 March 2010 в 13:34
поделиться

6 ответов

Если вы раньше не программировали игру, я рекомендую вам начать с Python и Pygame. Самому Python очень легко научиться, если вы уже программист, так что для вас это не будет большим скачком.

С Pygame вы почти не тратите время на написание «клея» или работу с обыденными низкоуровневыми деталями, такими как управление окнами и настройка звука - вы почти сразу же запрограммируете игровую логику и очень скоро станете blit влево и вправо. Более того, будет очень легко запустить прототип вашей игры, чтобы вы могли начать экспериментировать с механикой - я запрограммировал простой маленький платформер с боковой прокруткой за несколько часов.

Производительность

Производительность Python с Pygame обычно приличная для простых игр, хотя игры с «плавной прокруткой» могут показывать низкую производительность, особенно в Linux (по моему опыту, по крайней мере - pygame.display. update () буквально занимал 15-30 мсек на кадр в Linux и 4-5 мсек на кадр в Windows с дешевой графикой Intel, хотя это было два года назад, и в последнее время драйвер Intel для Linux улучшился). Вдобавок, если у вас есть физический / математический код Psyco может дать вам огромное ускорение (20% - 200% в некоторых случаях), хотя вы будете ограничены 32-битным Python на компьютерах x86.

Как только вы проработаете большую часть игровой логики, если производительность по-прежнему будет неудовлетворительной, вы можете переключиться на C и SDL. Поскольку вы уже написали логику игры, вам просто нужно сосредоточиться на работе непосредственно с SDL.Даже это должно быть довольно просто - Pygame внутренне использует SDL, поэтому перевод должен быть относительно простым.

OpenGL

К сожалению, вышесказанное верно только в том случае, если вы пишете 2D-игру - Pygame практически не помогает вам по OpenGL. Однако я бы не рекомендовал начинать программирование игр с OpenGL. Поначалу это может быть довольно сложно понять, поэтому вы столкнетесь с двумя проблемами одновременно - во-первых, вы пытаетесь выяснить, как получить игровую логику / физику / AI / и т. Д. работает, а потом вы изо всех сил пытаетесь понять OpenGL. В конце концов, стоит изучить OpenGL, но не для начала - лучше начать с основ и двигаться дальше.

Кросс-платформенность

Что касается кроссплатформенности - py2exe (для Windows) и py2app (для Mac) позволяют создавать отдельные исполняемые файлы, включающие ваши зависимости (включая интерпретатор Python и Pygame); однако я не думаю, что вы сможете создавать свои исполняемые файлы из среды Linux (возможно, вам придется одолжить компьютер Windows / Mac на несколько минут). Для Linux вы, вероятно, просто распространите .deb, в котором Pygame указан как зависимость (и Psyco как рекомендует или предлагает, если необходимо).

8
ответ дан 18 December 2019 в 10:44
поделиться

Взгляните на Ogre ; это двигатель за фонариком . Он поддерживает Windows, Ubuntu, MacOS и iPhone.

Вы также можете прочитать Gamasutra : их статьи, интервью, углубленный и посмертный анализ дают очень интересное понимание процесса разработки игры.

4
ответ дан 18 December 2019 в 10:44
поделиться

Я предполагаю, что ваша игра трехмерная. Если да, то вам нужен OpenGL. Это C, поэтому вы знакомы с синтаксисом, но подход немного отличается из-за того, что OpenGL является конечным автоматом. Подробнее по этой теме здесь .

OpenGL в основном встроен в каждую платформу, поэтому вам нужно будет только запустить одно полноэкранное окно и позволить OpenGL обработать рисунок. Для кросс-компиляции я бы рекомендовал wxWidgets , то есть C ++. Это позволит вам написать единый код для инициализации окна вашего приложения, которое компилируется на каждой платформе.

wxWidgets также имеют привязку python , если вы решите перейти на python, и в этом случае вам также понадобится PyOpenGL .

0
ответ дан 18 December 2019 в 10:44
поделиться

Это во многом зависит от того, хотите ли вы создать игру целиком, включая движок, или просто опираясь на уже установленный игровой движок. Хотя создание целого движка включает в себя гораздо больше накладных расходов и тяжелой работы, это дает вам массу опыта.

Теперь, если вы хотите создать игровой движок, язык для работы - C ++ (C тоже может работать, мне больше нравится C ++).

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

Что касается библиотек, большинство ваших проблем будет решено с помощью SDL, работать с ним не особенно приятно, но он справляется с головными болями кроссплатформенного взаимодействия с видео (OpenGL), окон, ввода и звука. Вам все равно нужно будет изучить OpenGL, чтобы использовать его в своей игре, SDL выполняет только инициализацию и настройку.

Что касается использования Python, я бы не рекомендовал его, если только ваша игра не простая (2D или простое 3D без использования тяжелой физики), потому что количество накладных расходов, понесенных Python, начнет съедать вашу частоту кадров.Для легкого языка сценариев Lua определенно лучший, он простой, гибкий и быстрый. Для его интеграции, если вам нужно простое решение, используйте LuaBind , но будьте осторожны! Будьте очень избирательны в том, где вы его используете, потому что это может полностью УБИРАТЬ ваше время компиляции!

3
ответ дан 18 December 2019 в 10:44
поделиться

Для обычных игр я бы рекомендовал Flash

0
ответ дан 18 December 2019 в 10:44
поделиться

Я бы посоветовал вам разработать его на QT ... QT сам решит большинство проблем с переносимостью ... так что вам не нужно беспокоиться об этом, к тому же он поддерживает большую часть платформы, включая мобильные ... и QT также имеет очень хорошую встроенную поддержку игр (графика, пользовательский интерфейс, управление звуком ...)

См. приложение Built in QT

1
ответ дан 18 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: