2011-02-16 15 views
5
Actualmente

estoy trabajando en un proyecto con pygame y estoy en necesidad de ser capaz de ver la parte de la superficie, para moverse, acercarse y alejarse ectPygame zoom/ventana de desplazamiento

¿Alguien puede recomendar una forma de lograr esto eficientemente, lo tengo trabajando en un método enrevesado en este momento, pero es demasiado lento y reduce el juego a aproximadamente 1 fps cuando se aleja para ver toda el área. (mi versión de solo desplazamiento y sin zoom funciona bien sin retraso)

Mirando a pesar de los documentos pygame.transform.scroll parece prometedor, pero no estoy seguro de cómo lo implementaría correctamente con pygame.transform.scale para acercar y cabo

Cualquier ayuda bienvenida

actualización: Jugueteé por un poco y lo consiguió objetos scaleing y sus posiciones de trabajo antes de bliting ellos. Ahora me he dado cuenta del problema de que la escala parece no ser natural debido a la baja resolución de los eventos de la rueda de desplazamiento del pygame, así que ahora estoy tratando de implementar algún tipo de suavizado.

+1

Puede encontrar una respuesta en gamedev.stackexchange.com si no encuentra nada aquí – Harold

Respuesta

1

No estoy del todo seguro de qué es exactamente lo que está haciendo. Sin embargo, puedo decir que no parece que estés abordando el problema de una manera que se adapte a Pygame.

Me parece que confía en los algoritmos de escalado de software, que es lo que usa Pygame, para escalar una imagen grande (todo el mundo del juego) a un tamaño mucho más pequeño. Cualquier cosa así, para superficies grandes, y en cada cuadro, va a afectar enormemente a su CPU.

Si el zoom es realmente importante, recomendaría un cambio a una biblioteca que tenga escalado acelerado por hardware, es decir, pyglet. Después de todo, ¿con qué frecuencia veías los juegos alejarse en los días previos a las GPU? Virtualmente nunca, esa es la frecuencia.

+0

Eché un vistazo breve a pyglet y aunque no sería tan malo para miagrate (no hay mucho código de representación todavía) no estoy de acuerdo aprendiendo un nuevo módulo. ¿Crees que sería adecuado intentar escalar los objetos tal como se dibujan en lugar de toda la superficie (prácticamente todos los elementos del juego están hechos por pygame.draw o pygame.gfxdraw) – Hugoagogo

+0

Sí, puedes hacerlo absolutamente. Requiere un poco de trabajo de su parte, y perderá algo de fidelidad. En el alejamiento extremo, es posible que necesite una precisión subpíxel (que no se puede obtener con pygame) para que se vea bien. – porgarmingduod

+0

después de un tiempo realmente volví y comencé a usar pyglet (en realidad no había tanto código de dibujo para transferir) pero todavía no puedo descifrar cómo cambiar entre juegos y menús ect en pyglet – Hugoagogo

0

Puede usar pygame con OpenGL, ya que ya está familiarizado con pygame. De lo contrario, pyglet es una biblioteca opengl similar.

-1

Para un juego que nunca he terminado utilicé la trigonometría para obtener las nuevas posiciones de dibujo con una cámara con zoom y vuelta libre (algo complicado). Realmente no llevó mucho tiempo calcular, pero creo que es más eficiente usar otras bibliotecas. Pero si quiere algunos ejemplos solo pregunte.

+0

Primero calculé el ángulo y la distancia entre un objeto y mi cámara. Luego calculé la nueva posición de dibujo con estos valores y el ángulo de giro de mi cámara y su altura. – nmin