Menu
CoddyTech

Vector2

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

위치는 두 개의 숫자로 이루어지며, 속도도 마찬가지입니다. x축 방향 속력과 y축 방향 속력이죠. pygame.Vector2는 두 숫자를 함께 저장하고 두 숫자에 동시에 연산을 수행합니다.

pos = pygame.Vector2(240, 180)
vel = pygame.Vector2(150, 90)

pos += vel * dt

vel * dt는 두 성분에 모두 곱하고 pos += ...는 두 성분을 모두 더하므로, 한 줄로 공을 초당 오른쪽으로 150픽셀, 아래쪽으로 90픽셀 움직입니다. pos.x와 pos.y를 사용하면 한 성분을 읽거나 바꿀 수 있으며, pygame.draw.circle은 중심 위치로 Vector2를 받습니다.

벽에 튕기게 하려면 속도의 한 성분 방향을 뒤집습니다. 공이 한쪽 벽을 지나면 vel.x = -vel.x가 공을 되돌려 보내고 위아래 속도는 그대로 둡니다.

if pos.x < 16 or pos.x > 464:
    vel.x = -vel.x

공의 반지름은 16이므로, 위치가 16과 464일 때 공의 가장자리가 창의 양쪽 벽에 닿습니다.

challenge icon

챌린지

중급
  1. x, y를 pos = pygame.Vector2(240, 180)로 바꾸고, vx, vy를 vel = pygame.Vector2(150, 90)로 바꾸세요.
  2. pos += vel * dt로 공을 움직이고 pos 위치에 그리세요.
  3. pos.x가 16보다 작거나 464보다 클 때 vel.x의 방향을 반대로 바꾸고, pos.y가 16보다 작거나 344보다 클 때 vel.y의 방향을 반대로 바꾸세요.

직접 해보기

import pygame

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

x, y = 240, 180
vx, vy = 150, 90
dt = 0

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

    x += vx * dt
    y += vy * dt

    screen.fill((30, 30, 46))
    pygame.draw.circle(screen, (80, 160, 255), (x, y), 16)
    pygame.display.flip()
    dt = clock.tick(60) / 1000

pygame.quit()

게임 루프의 모든 레슨

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