2009-11-23 13 views
6

Estoy buscando un buen marco gráfico para hacer un buen juego en 2D en Ruby. Hice 3 pruebas muy simples para ver qué marco gráfico de Ruby es más rápido entre Gosu y Rubygame. La prueba crea 1000 instancias de una clase "Cuadrada" que se mueve y dibuja un cuadrado rojo de la manera más simple usando el método del marco. La tercera prueba es la misma pero en una implementación pura de OpenGL (sin ningún marco). Aquí está los resultados:¿Por qué rubygame y gosu son más lentos que opengl puros?

OPENGL PURE (usando ruby-OpenGL) 80Fps: alt text http://grab.by/JTM

gosu (usando ruby-OpenGL + gosu) 46Fps: alt text http://grab.by/JTC

RUBYGAME (usando ruby-OpenGL + rubygame + rsdl) 32Fps: alt text http://grab.by/JTw

¿Por qué hay una diferencia de fps tan grande entre la prueba de OpenGL pura y la prueba de Rubygame o Gosu? (¿han usado ambos opengl)

¿Son realmente confiables esos marcos o hay un mejor marco que debo usar? (No me veo a mí mismo pasando por todo el proceso de carga de imágenes de sonidos y fuentes en OpenGL puro: p)

¿Cuál es su opinión?

Respuesta

5

Cuando utiliza un marco, cualquier marco para simplificar y acelerar el desarrollo, incurre inmediatamente en una penalización de rendimiento. OpenGL es una biblioteca buena y rápida, pero cuando la envuelve con un lenguaje y un marco de alto nivel como Ruby, puede esperar una desaceleración. OpenGL todavía es rápido, tu lentitud proviene de la sobrecarga de lo que está sucediendo dentro de esos marcos. Aún así, 46 fps no parece tan malo, pero si vas a estresar el motor mucho más que tu ejemplo, podrías terminar con un juego que no se puede jugar.

+1

Estoy de acuerdo, pero la brecha es enorme :) ¿Hay un mejor marco para hacer gráficos 2D (o 3D) en tiempo real en ruby? – XPac27

0

Si esa es la penalidad de usar un framework, me pregunto cuál es la penalidad por implementar realmente la lógica del juego ... Mis esperanzas de usar Ruby para gamedev se están hundiendo aún más rápido.

+0

Es bastante común que un framework trabaje mucho para usted y necesite hacerlo usted mismo. Entonces verás una ralentización inicial como esta, pero cuando comiences a agregar tu código de juego, es posible que no veas mucha más desaceleración ya que usa eficientemente el marco para realizar tareas. – Kylotan

+0

¿Desea mover 1000 imágenes en la pantalla de una vez? incluso si lo haces, obtendrás 45 FPS. Eso no está nada mal. – horseyguy

0

¿Estás usando YARV? Deberías probar una implementación de Ruby alternativa, como jruby o rubinius.

+0

No, estoy usando el ruby ​​1.8.1 (mac). Pero parece que es la mejor solución: http://programmingzen.com/2010/07/19/the-great-ruby-shootout-july-2010/ Tal vez el problema proviene del hecho de que Rubygame se basa en SDL. – XPac27

+1

Si está en Mac, eche un vistazo a http://www.macruby.org/. – mk12

2

Acabo de hacer un proyecto cuadrado usando Ruby 1.9.2 y Gosu. Pude obtener 1000 cuadros y 60 fps sin problemas de rendimiento en mi MacBook Pro. Usando eval para desenrollar mi matriz de objetos obtuve 4000 cuadrados a 60 fps. Los cuadrados tienen una velocidad aleatoria y rebotan en el borde del monitor.

Cuestiones relacionadas