2010-11-15 4 views
12

Насколько практично было бы использовать Cython в качестве основного языка программирования для игры?Использование Cython для разработки игры?

Я опытный программист на Python, и мне это очень нравится, но я, по общему признанию, новичок, когда речь заходит о программировании игр. Я знаю, что, как правило, Python считается слишком медленным для любого серьезного игрового программирования, поэтому Cython мне интересен. С Cython я могу использовать язык, похожий на Python, со скоростью C.

Я понимаю, что мне, вероятно, потребуется немного узнать C/C++, но похоже, что Cython ускорит время разработки довольно бит в сравнении.

Итак, это практично? И я все еще смогу использовать библиотеки C/C++, такие как OpenGL, OpenAL и Bullet Physics?

+0

http://docs.cython.org/src/userguide/external_C_code.html –

+0

Это зависит от того, является ли ваша игра тик-носом или шутером от первого лица ... ;-) –

ответ

15

Если вы работаете с такой комбинацией, и ваша цель - написать 3D-игру, вы, вероятно, получите лучший пробег из готового 3D-движка с зрелыми физическими и аудиосвязями и API-интерфейсом Python, например OGRE 3D (Python-OGRE) или Panda3D. Даже если вы этого не сделаете, это сообщение о using Cython with Panda3D может быть полезно.

Я не уверен, что сейчас, но back in 2007, компромисс между этими двумя была в основном это:

  • Panda3D была лучше документированы и разработан с нуля, чтобы быть C++ ускоренную Python (по-видимому, они приняли некоторые решения по дизайну API, которые не встречаются с проектами двигателя C++) и, как предсказуемо, имели более зрелый API Python.
  • PyOgre был построен на основе гораздо более продвинутого двигателя и имел более крупное и яркое сообщество.

... однако вполне возможно, что, возможно, это изменилось, учитывая, что в течение некоторого времени, в 2007 году, Panda3D все еще находился под лицензией GPL-совместимости, и это отгоняло многих людей. (Включая меняю)

+0

+1 для чтобы дать потенциально полезный ответ на этот вопрос. Я думал, что это безнадежно. –

+3

В качестве примечания, Python-Ogre в настоящее время почти мертв, тем более, что сайт полностью ушел :-( –

5

Я обнаружил, что много времени, особенно для больших библиотек, вы тратите огромное количество времени, просто настраивая проект Cython для сборки, зная, какие структуры импортировать, связывая код C с Python в в любом направлении. В то время как Cython - прекрасная секундомер (и значительно более приятная, чем чистая разработка C/C++), количество C++, которое вам нужно было бы научиться эффективно использовать, в основном означает, что вам придется укусить пулю и выучите C++ в любом случае.

Как насчет PyGame?

-1

Нитки !!! Хорошая современная игра должна использовать потоки. Cython практически запрещает их использование, удерживая GIL (глобальный шлюз интерпретатора) все время, делая ваш код в последовательности.

Если вы не пишете огромную игру, чем Python/Cython в порядке. Но Cython не является хорошим как современный язык без хорошей поддержки нитей.

+1

Если ваш код не касается объектов Python, вы можете освободить GIL в блоках nogil. Функции также можно аннотировать как «nogil». В эти дни Cython имеет встроенные массивы, поэтому вы можете делать довольно много, не касаясь объектов Python. – Winterstream

6

на эту дату (12 апреля 2011 г.) unixmab83 неверен.

Cython не запрещает использование потоков, вам просто нужно использовать специальные инструкции no_gil.

Помимо связок C++ теперь функционирует в cython.

Мы используем его для чего-то близкого к гамедеву. Поэтому, хотя я не могу быть окончательным в этом вопросе, cython является действительным кандидатом.

7

Я разработчик для Ignifuga Game Engine, это 2D-ориентированный и Python/Cython/SDL. Обычно я разрабатываю код на Python, а затем просматриваю его, чтобы увидеть, есть ли какие-то очевидные узкие места (основной цикл, код рендеринга - хорошие кандидаты) и преобразовать эти модули в Cython. Затем я запускаю весь код (основанный на Python и Cython) через Cython и скомпилируем его статически против SDL. Другим большим плюсом для Cython является то, что привязка к SDL или любой библиотеке на основе C почти тривиальна. Что касается потоков, то двигатель в настоящее время однопоточный с кооперативной многозадачностью через Greenlets, хотя это происходит из дизайнерского решения для смягчения потенциальных многопоточных ловушек, к которым могут прибегать неопытные разработчики, а не ограничения на роль Китона.

0

Я знаю Cython, и вам не нужно знать C/C++. Вы будете использовать статическую печать, но очень легко. Самая сложная задача - заставить компиляцию работать, я думаю, что в Windows это делается над визуальной студийной штукой. Существует что-то вроде стандартной библиотеки, включая математику, например. Увеличение скорости не слишком велико, но это зависит от вашего объема. ctypes был намного быстрее (чистый C), но соединение с Python было очень медленным, так что я решил искать Cython, который все еще может быть динамичным.

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