Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 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 не подходит как современный язык без хорошей поддержки нитей.