Foros del Web » Programando para Internet » Python »

Duda de sprite en pygame

Estas en el tema de Duda de sprite en pygame en el foro de Python en Foros del Web. Estoy haciendo un juego usando pygame, tengo muchos sprite en movimiento, todos los tengo en un grupo OrderedGroup. Hasta ahora cada vez que cambia un ...
  #1 (permalink)  
Antiguo 08/07/2010, 16:57
 
Fecha de Ingreso: agosto-2008
Mensajes: 26
Antigüedad: 16 años, 4 meses
Puntos: 0
Duda de sprite en pygame

Estoy haciendo un juego usando pygame, tengo muchos sprite en movimiento, todos los tengo en un grupo OrderedGroup.

Hasta ahora cada vez que cambia un sprite hago que se actualice en la pantalla todos los sprite del grupo.

De la siguiente forma:

Código:
def updateGrupo(self):
        self.grupo.clear(self.vista.pantalla,self.vista.fondo)
        self.grupo.update()
        self.update(self.grupo.draw(self.vista.pantalla))
El problema es que muchas veces solo cambia un sprite, y me gustaría actualizar solo ese, no todo el grupo.

Espero haber sido claro.
  #2 (permalink)  
Antiguo 09/07/2010, 00:22
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Duda de sprite en pygame

Que no para eso sirve el método update?
Que clase usas Gruop o GroupSingle?

Sin mas código sobre lo que estas haciendo no te podemos ayudar.

Una lectura que recomiendo para aprender sprites y grupos es esta.
  #3 (permalink)  
Antiguo 09/07/2010, 11:31
 
Fecha de Ingreso: agosto-2008
Mensajes: 26
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Duda de sprite en pygame

Uso un OrderedGroup, es parecido al RenderedGroup, pero mantiene orden de los sprites. OrderedGroup no esta en el artículo que me recomendaste, quizás es parte de una versión de pygame más nueva que en la que se basaron para escribir esa explicación.

El método update de los grupos lo que tengo entendido que hace es llamar al método update de cada sprite, entonces no tiene nada que ver con la muestra del sprite en pantalla. Quizas esté equivocado, por favor corregirme si es así.

Arme una solución, que me parece media precaria, y propia de un programador que no sabe utilizar eficientemente las clases y métodos que provee el módulo que importa.

Aclaro un poco el código que había mostrado


Código Python:
Ver original
  1. self.grupo = OrderedGroup()
  2.  
  3. def updateGrupo(self):
  4.         self.grupo.clear(self.surfaceScreen,self.surfaceFondo)
  5.         self.grupo.update()
  6.         display.update(self.grupo.draw(self.surfaceScreen))
  7.  
  8. def updateSpriteAlone(self,unSprite):
  9.         self.surfaceScreen.blit(self.surfaceFondo,unSprite.rect.topleft,unSprite.rect)
  10.         self.surfaceScreen.blit(unSprite.image,unSprite.rect.topleft)
  11.         display.update(unSprite.rect)

El problema de este método es que no admite actualización de sprites que esten encimados, pero de todas formas no tengo ese problema.

Última edición por Javitus; 10/07/2010 a las 06:34
  #4 (permalink)  
Antiguo 11/07/2010, 14:43
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 9 meses
Puntos: 1360
Respuesta: Duda de sprite en pygame

Cita:
Iniciado por Javitus
El método update de los grupos lo que tengo entendido que hace es llamar al método update de cada sprite,
Si hasta aquí vas bien.

Cita:
Iniciado por Javitus
entonces no tiene nada que ver con la muestra del sprite en pantalla.
Bien todo lo contrario el método update es el encargado de determinar la nueva posición o si la imagen cambia.

Otro pequeño tutorial que tambien recomiendo es el Line by Line Chimp con especial atención a las clases Fist y Chimp.

Aunque casi no maneja grupos, solo para hacer el render de los sprites.

Tal vez haga un ejemplo mas detallado de como usar grupos. Ademas de que pygame 1.9 ha tenido interesantes mejoras.

Etiquetas: sprite
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:40.