Использование Cython для разработки игр? - PullRequest
15 голосов
/ 15 ноября 2010

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

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

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

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

Ответы [ 6 ]

16 голосов
/ 15 ноября 2010

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

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

  • Panda3D был лучше задокументирован и изначально разрабатывался как ускоренный C ++ движок Python (очевидно, они приняли некоторые решения по разработке API, которые невстречаются в проектах движка C ++) и, как и ожидалось, имели более зрелый API Python.
  • PyOgre был построен на основе гораздо более продвинутого движка и имел более широкое и энергичное сообщество.1020 * ... однако вполне возможно, что это могло измениться, учитывая, что с течением времени в 2007 году Panda3D все еще находилась под лицензией, несовместимой с GPL, и это отогнало многих людей.(Включая меня)
8 голосов
/ 21 февраля 2012

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

6 голосов
/ 12 апреля 2011

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

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

Рядом с bindins c ++ теперь работает и в Cython.

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

5 голосов
/ 15 ноября 2010

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

Как насчет PyGame?

0 голосов
/ 11 июня 2013

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

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

0 голосов
/ 15 декабря 2010

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

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

...