2010-11-15 27 views
12

¿Qué tan práctico sería usar Cython como el lenguaje de programación principal para un juego?¿Usando Cython para el desarrollo de juegos?

Soy un experimentado programador de Python y me encanta, pero reconozco que soy un novato en lo que respecta específicamente a la programación de juegos. Sé que, por lo general, a Python se lo considera demasiado lento para realizar una programación de juegos seria, por lo que Cython es interesante para mí. Con Cython puedo usar un lenguaje Python con la velocidad de C.

Entiendo que probablemente necesite aprender un poco de C/C++ de todos modos, pero parece que Cython aceleraría el tiempo de desarrollo bastante poco en comparación.

Entonces, ¿es práctico? ¿Y aún podría utilizar bibliotecas C/C++ como OpenGL, OpenAL y Bullet Physics?

+0

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

+0

Depende mucho de si su juego es tic-tac-toe o un shooter en primera persona ... ;-) –

Respuesta

15

Si está trabajando con una combinación como esa y su objetivo es escribir un juego en 3D, probablemente obtenga un mayor rendimiento de un motor 3D listo con física madura y enlaces de audio y una API de Python como OGRE 3D (Python-OGRE) o Panda3D. Incluso si no lo hace, esta publicación sobre using Cython with Panda3D puede ser útil.

No estoy seguro acerca de ahora, pero back in 2007, el equilibrio entre los dos era básicamente que:

  • Panda3D fue mejor documentado y diseñado desde cero para ser un C++ aceleró Python motor (aparentemente tomaron algunas decisiones de diseño de API que no ocurren en los proyectos de motor C++) y, como era de esperar, tenía una API de Python más madura.
  • PyOgre fue construido sobre un motor mucho más avanzado y tenía una comunidad más grande y vibrante.

... sin embargo, es muy posible que haya cambiado, dado que, aparte del paso del tiempo, en 2007, Panda3D todavía estaba bajo una licencia incompatible con GPL y eso alejó a mucha gente. (Yo mismo incluido)

+0

+1 para logrando dar una respuesta potencialmente útil a esta pregunta. Pensé que era inútil. –

+3

Como nota, Python-Ogre ahora está prácticamente muerto, especialmente porque el sitio web ya no existe :-( –

5

He encontrado que la mayor parte del tiempo, especialmente para bibliotecas más grandes, terminas gastando una gran cantidad de tiempo simplemente configurando el proyecto de Cython para construir, sabiendo qué estructuras importar, conectando el código C en Python en cualquier dirección, etc. Mientras que Cython es una buena solución temporal (y mucho más agradable que el desarrollo puro de C/C++), la cantidad de C++ que tendrías que aprender para usarlo de manera efectiva básicamente significa que vas a tener que morder la bala y aprender C++ de todos modos.

¿Qué tal PyGame?

-1

Hilos !!! Un buen juego moderno debe usar hilos. Cython prácticamente prohíbe su uso, manteniendo presionado GIL (bloqueo de intérprete global) todo el tiempo, haciendo que su código se ejecute en secuencia.

Si no está escribiendo un gran juego, entonces Python/Cython está bien. Pero Cython no sirve como lenguaje moderno sin un buen soporte de hilos.

+1

Si su código no toca objetos de Python, puede liberarlo en bloques nogil. Las funciones también se pueden anotar como "nogil". En estos días, Cython tiene matrices nativas, por lo que puede hacer muchas cosas sin tocar objetos de Python. – Winterstream

6

en esta fecha (12 de abril de 2011) unixmab83 es ​​incorrecto.

Cython no prohíbe el uso de hilos, solo necesita utilizar las instrucciones especiales no_gil.

Al lado de las ataduras de C++ ahora es funcional en cython.

Lo usamos para algo que está cerca de gamedev. Entonces, aunque no puedo ser el último en esto, cython es un candidato válido.

7

Soy el desarrollador del Ignifuga Game Engine, está orientado en 2D y basado en Python/Cython/SDL. Lo que generalmente hago es desarrollar el código en Python, y luego perfilar el motor para ver si hay algunos cuellos de botella obvios (el ciclo principal, el código de representación son buenos candidatos) y convertir esos módulos a Cython. Luego ejecuto todo el código (basado en Python y Cython) a través de Cython, y lo compilo estáticamente contra SDL. Otra de las grandes "ventajas" de Cython es que enlazar a SDL, o cualquier biblioteca basada en C, es casi trivial. En cuanto a los hilos, el motor actualmente tiene un solo hilo con multitarea cooperativa a través del Greenlets, aunque esto proviene de una decisión de diseño para mitigar las posibles fallas múltiples en las que los desarrolladores no experimentados pueden caer, en lugar de una limitación por parte de Cython.

0

Conozco Cython y no tiene que saber C/C++. Utilizará tipeo estático pero muy fácil. La parte más difícil es hacer funcionar la compilación, creo que en Windows esto se hace sobre algo visual de estudio. Hay algo así como una biblioteca estándar, incluidas las matemáticas, por ejemplo. El aumento de velocidad no es demasiado grande, pero esto depende de su alcance. ctypes era mucho más rápido (C puro) pero la conexión con Python era muy lenta, así que decidí buscar Cython, que aún puede ser dinámico.

Para ganar velocidad en un juego, Cython será la elección correcta, pero yo llamaría a este rendimiento también limitado.

Cuestiones relacionadas