Menu
CoddyTech

Un bloque que cae

Parte de la sección El bucle del juego del Journey de Pygame de Coddy. Lección 24 de 32.

Algo que cae es algo cuya y aumenta en cada fotograma. Haz que el bloque también sea un Rect y suma un valor a su y en cada pasada del bucle:

block = pygame.Rect(220, 0, 20, 20)

while running:
    # eventos y teclas
    block.y += 3
    # rellenar, dibujar

A 60 fotogramas por segundo, 3 píxeles por fotograma equivalen a 180 píxeles por segundo. La ventana tiene 360 píxeles de alto, así que el bloque tarda dos segundos en llegar al fondo.

Este juego se mueve fotograma a fotograma, como Move a Square, no mediante dt. Un Rect solo conserva números enteros, así que un paso de, por ejemplo, 0.6 píxeles se truncaría a 0 y el Rect nunca se movería. Los juegos que mueven Rects en función del tiempo guardan la posición en un Vector2 y la copian en el Rect.

El bloque sigue cayendo después de salir de la ventana. Todavía nada lo detiene; la próxima lección lo traerá de vuelta.

challenge icon

Desafío

Fácil
  1. Debajo de la cesta, crea block = pygame.Rect(220, 0, 20, 20).
  2. En el bucle, después de que se mueva la cesta, suma 3 a block.y.
  3. Dibuja el bloque en rojo (235, 80, 80) después de la cesta.

Pruébalo tú mismo

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Catch the Blocks")
clock = pygame.time.Clock()

basket = pygame.Rect(200, 330, 80, 16)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        basket.x -= 8
    if keys[pygame.K_RIGHT]:
        basket.x += 8
    basket.clamp_ip(screen.get_rect())

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), basket)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Todas las lecciones de El bucle del juego

Practica por tu cuenta: Playground de Pygame