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


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

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

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

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


15


источник


Ответы:


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

Я не уверен сейчас, но еще в 2007 году , компромисс между ними заключался в том, что:

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

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


16



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


8



на эту дату (12 апреля 2011 г.) unixmab83 ошибочен.

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

Рядом с bindins c ++ теперь функционирует cython.

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


6



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

Как насчет PyGame?


5



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

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


0



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

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


-1