Creación y movimiento de sprites - Curso Pygame - Capítulo 7


Vamos a empezar a trabajar con sprites. Lo vamos a hacer desde lo más básico para quienes no hayan trabajado con sprites.

En Pygame, cualquier sprite se representa como un rectángulo, es decir, se representa de la misma forma que el ordenador almacena las imágenes, en formas rectangulares o cuadradas. En el caso de Pygame, podemos utilizar imágenes transparentes para que no quede un juego rectangular o cuadrado.
Por lo tanto, a partir de ahora, cuando hable de rectángulo me referiré a las imágenes.

A partir de este capítulo, empiezo a trabajar con clases, por lo que si no sabes mucho de programación orientada a objetos, te recomiendo mi curso de POO en Python.

En el siguiente código tienes una clase que va a representar a la del jugador principal, pero primero, antes de cargar una imagen del personaje, vamos a aprender a manejar los sprites.

Código Python

class Jugador(pygame.sprite.Sprite)
	# Sprite del jugador
	def __init__(self):
		# Heredamos el init de la clase Sprite de Pygame
		super().__init__()
		# Rectángulo (jugador)
		self.image = pygame.Surface((200, 200))
		self.image.fill(H_FA2F2F)
		# Obtiene el rectángulo (sprite)
		self.rect = self.image.get_rect()
		# Centra el rectángulo (sprite)
		self.rect.center = (ANCHO // 2, ALTO // 2)

Creamos una clase que herede de la clase Sprite de Pygame. Esta clase será la que tendrá el jugador.
Aquí, a nuestro personaje principal le iremos añadiendo características y habilidades.

Especificamos un método init().
Lo primero es heredar todo lo que contiene la superclase en este caso Sprite de Pygame. Esta clase Sprite viene preparada para hacernos más sencillo el uso de sprites.
Una vez hemos heredado de ella, podemos utilizar sus atributos y métodos.
Las imágenes en Pygame son rectángulos (ojo, ya expliqué que un rectángulo si especificas el mismo número en las coordenadas 'x' como en 'y' haces un cuadrado). Estos rectángulos, pueden ser imágenes '.png' con transparencia y ya no se verán como rectángulos aunque en realidad lo sean.

En self.image = pygame.Surface((200, 200)) lo que hago es especificar un tamaño de rectángulo. Se especifica 200 píxeles de 'x' y 200 pixeles de 'y', lo que hace un cuadrado perfecto.
Esta image va a representar la imagen del personaje.
Si no recuerdas bien lo de las formas geométricas te recomiendo un repaso al capítulo 2.
Con Surface nos referimos a la superficie de la ventana.

Le aplicamos a image un color con fill.

Con self.rect = self.image.get_rect() obtenemos el rectángulo de la imagen del jugador. Esto nos permitirá manipularlo.

Con self.rect.center = (ANCHO // 2, ALTO // 2) centramos la imagen del jugador.

Para los sprites, tendremos que crear en las clases un método de actualización para poder crear movimiento.
Este método tiene que llamarse update, ya que es un método heredado de la clase Sprite.
El contenido de este método se va a actualizar cada vuelta.
Si queremos por ejemplo que el sprite se mueva de arriba a abajo, especificaremos la coordenada 'y' del rectángulo y según los píxeles que le incrementes, cada vuelta del bucle irá más rápido o más lento.
Por ejemplo, con 10, como tienes en el código, cada vez que se ejecute el bucle del juego, el rectángulo avanza diez píxeles.

En el vídeo puedes ver más opciones sobre cómo mover en otras direcciones los sprites.

Código Python

def update(self):
	# Actualiza esto cada vuelta de bucle.
	self.rect.y += 10
	if self.rect.top > ALTO:
		self.rect.bottom = 0

Para finalmente poder mostrar sprites, debes añadirlos a grupos de sprites.

Código Python

# Grupo de sprites, instanciación del objeto jugador.
sprites = pygame.sprite.Group()
jugador = Jugador()
sprites.add(jugador)

Además, deberás añadir un update en el bucle del juego. Si tu grupo de sprites se llama sprites como el mio, pues debes añadir esto:

Código Python

sprites.update()

Y por último, un draw para dibujar el sprite en la pantalla.

Código Python

sprites.draw(pantalla)

Suscríbete a mi canal de YouTube para apoyarme

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.


Comentarios

Si te quedan dudas sobre el temario, sobre Python, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.