Menu
CoddyTech

떨어지는 블록

Coddy Pygame 여정의 게임 루프 섹션에 포함된 레슨. 32개 중 24번째.

무언가가 떨어진다는 것은 매 프레임마다 y값이 커진다는 뜻입니다. 블록도 Rect로 만들고, 루프가 반복될 때마다 y값을 더하세요.

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

while running:
    # 이벤트와 키
    block.y += 3
    # 채우기, 그리기

초당 60프레임에서 프레임당 3픽셀은 초당 180픽셀입니다. 창의 높이는 360픽셀이므로 블록이 바닥에 도달하는 데 2초가 걸립니다.

이 게임은 ‘정사각형 움직이기’에서처럼 dt가 아니라 프레임 단위로 움직입니다. Rect에는 정수만 저장되므로 0.6픽셀과 같은 이동량은 0으로 잘려 Rect가 전혀 움직이지 않습니다. Rect를 시간에 따라 움직이는 게임에서는 Vector2에 위치를 저장하고 이를 Rect에 복사합니다.

블록은 창을 벗어난 뒤에도 계속 떨어집니다. 아직 블록을 멈추는 것은 아무것도 없습니다. 다음 강의에서 블록을 다시 화면으로 가져옵니다.

challenge icon

챌린지

쉬움
  1. 바구니 아래에 block = pygame.Rect(220, 0, 20, 20)을 만드세요.
  2. 반복문에서 바구니가 움직인 후 block.y에 3을 더하세요.
  3. 바구니를 그린 후 블록을 빨간색 (235, 80, 80)으로 그리세요.

직접 해보기

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()

게임 루프의 모든 레슨

직접 연습해 보세요: Pygame 플레이그라운드