El caballero
Lección 2 de 20 del curso Proyecto con Pygame: Defiende la fortaleza de Coddy.
El caballero es un sprite: una clase basada en pygame.sprite.Sprite que guarda su imagen en self.image y su posición en self.rect.
class Knight(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = knight_img
self.rect = pygame.Rect(0, 0, 24, 24)
self.rect.center = courtyard.centerLa imagen mide 48 píxeles por lado, pero el Rect mide solo 24. Los monstruos chocarán con el Rect, así que un monstruo tiene que llegar al cuerpo del caballero, no a una esquina del espacio vacío que lo rodea. Una caja de colisión pequeña le parece justa al jugador.
Como la imagen y el Rect tienen tamaños distintos, dibuja la imagen centrada en el centro del Rect. image.get_rect(center=point) devuelve un Rect del tamaño de la imagen, centrado en un punto, y blit lo acepta como la posición donde dibujar:
def draw(image, center):
screen.blit(image, image.get_rect(center=center))Desafío
Fácil- Carga la imagen del caballero:
knight_img = load("knight.png"). - Escribe la clase
Knightde arriba: imagenknight_img, unrectde 24 por 24 centrado encourtyard.center. - Escribe la función
draw(image, center). - Antes del bucle, crea
knight = Knight()y, después de dibujar el fondo, dibújalo condraw(knight.image, knight.rect.center).
Pruébalo tú mismo
import pygame
WIDTH, HEIGHT = 720, 480
TILE = 48
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Hold the Keep")
clock = pygame.time.Clock()
def load(name):
return pygame.image.load("assets/images/" + name).convert_alpha()
floor_img = load("floor.png")
wall_img = load("wall.png")
courtyard = pygame.Rect(TILE, TILE, WIDTH - 2 * TILE, HEIGHT - 2 * TILE)
background = pygame.Surface((WIDTH, HEIGHT))
for row in range(HEIGHT // TILE):
for col in range(WIDTH // TILE):
x = col * TILE
y = row * TILE
if courtyard.collidepoint(x, y):
background.blit(floor_img, (x, y))
else:
background.blit(wall_img, (x, y))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.blit(background, (0, 0))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Todas las lecciones de Proyecto con Pygame: Defiende la fortaleza
Practica por tu cuenta: Playground de Pygame