Кросс-компиляция и упаковка игр - PullRequest
5 голосов
/ 08 марта 2010

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

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

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

Ответы [ 6 ]

8 голосов
/ 18 марта 2010

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

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

Performance

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

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

OpenGL

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

Кроссплатформенные соображения

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

4 голосов
/ 08 марта 2010

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

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

3 голосов
/ 17 марта 2010

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

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

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

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

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

1 голос
/ 19 марта 2010

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

Пожалуйста, смотрите приложение, встроенное в QT

0 голосов
/ 18 марта 2010

Для казуальных игр я бы порекомендовал Flash

0 голосов
/ 17 марта 2010

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

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

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

...