Использование Cython для разработки игры?
Насколько практично было бы использовать Cython в качестве основного языка программирования для игры?
Я опытный программист на Python, и мне это очень нравится, но я, по общему признанию, новичок, когда речь заходит о программировании игр. Я знаю, что, как правило, Python считается слишком медленным для любого серьезного игрового программирования, поэтому Cython мне интересен. С Cython я могу использовать Python-подобный язык со скоростью C.
Я понимаю, что в любом случае мне, вероятно, понадобится немного узнать C/С++, но похоже, что Cython ускорит время разработки в сравнении.
Итак, это практично? И мог ли я по-прежнему использовать библиотеки C/С++, такие как OpenGL, OpenAL и Bullet Physics?
Ответы
Ответ 1
Если вы работаете с такой комбинацией, и ваша цель - написать 3D-игру, вы, вероятно, получите лучший пробег из готового 3D-движка с зрелыми физическими и звуковыми связями и API-интерфейсом Python, например OGRE 3D (Python-OGRE) или Panda3D. Даже если вы этого не сделаете, этот пост о с использованием Cython с Panda3D может оказаться полезным.
Сейчас я не уверен, но в 2007 году, компромисс между ними состоял в основном в том, что:
- Panda3D был лучше документирован и разработан с нуля, чтобы быть ускоренным движком Python на С++ (по-видимому, они приняли некоторые решения по дизайну API, которые не встречаются с проектами ядра С++) и, как предсказуемо, имели более зрелый API Python.
- PyOgre был построен на основе гораздо более продвинутого движка и имел более крупное и более яркое сообщество.
... однако вполне возможно, что, возможно, это изменилось, учитывая, что в течение некоторого времени в 2007 году Panda3D все еще находилась под лицензией GPL-совместимости, и это отгоняло многих людей. (Включая меня)
Ответ 2
Я разработчик Ignifuga Game Engine, это 2D-ориентированный и Python/Cython/SDL. Обычно я разрабатываю код на Python, а затем просматриваю его, чтобы увидеть, есть ли какие-то очевидные узкие места (основной цикл, код рендеринга - хорошие кандидаты) и преобразовать эти модули в Cython. Затем я запускаю весь код (основанный на Python и Cython) через Cython и скомпилируем его статически против SDL.
Другим большим плюсом для Cython является то, что привязка к SDL или любой библиотеке на основе C почти тривиальна.
Что касается потоков, то в настоящее время движок имеет однопоточную совместную многозадачность с помощью Greenlets, хотя это происходит из дизайнерского решения для смягчения потенциальных многопоточных ловушек, которые могут возникнуть у неопытных разработчиков чем ограничение на часть Китона.
Ответ 3
в эту дату (12 апреля 2011 г.) unixmab83 неверен.
Cython не запрещает использование потоков, вам просто нужно использовать специальные инструкции no_gil.
Кроме того, bindins С++ теперь функционирует в cython.
Мы используем его для чего-то близкого к гамедеву. Поэтому, хотя я не могу быть окончательным в этом вопросе, cython является допустимым кандидатом.
Ответ 4
Я обнаружил, что много времени, особенно для больших библиотек, вы тратите огромное количество времени, просто настраивая проект Cython для сборки, зная, какие структуры импортировать, перестраивая код C на Python в любом и т.д. Хотя Cython - прекрасная секундомер (и значительно более приятная, чем чистая разработка C/С++), количество С++, которое вам нужно было бы научиться эффективно использовать, в основном означает, что вам придется укусить пулю и научиться С++ в любом случае.
Как насчет PyGame?
Ответ 5
Я знаю Cython, и вам не нужно знать C/С++.
Вы будете использовать статическую типизацию, но очень легко.
Самое сложное - заставить компиляцию работать, я думаю, что в Windows это делается над визуальной студийной штукой.
Есть что-то вроде стандартной библиотеки, включая математику, например. Увеличение скорости не слишком велико, но это зависит от вашего объема.
ctypes был намного быстрее (чистый C), но связь с Python была очень медленной, поэтому я решил искать Cython, который все еще может быть динамическим.
Для увеличения скорости в игре Cython будет правильным выбором, но я бы назвал это исполнение также ограниченным.
Ответ 6
Темы!!! Хорошая современная игра должна использовать потоки. Cython практически запрещает их использование, удерживая GIL (глобальную блокировку интерпретатора) все время, делая ваш код в последовательности.
Если вы не пишете огромную игру, чем Python/Cython в порядке. Но Cython не подходит как современный язык без хорошей поддержки нитей.