Menu
CoddyTech

획득 시 튀어 오르기

Coddy Pygame 여정의 사운드와 게임의 손맛 섹션에 포함된 레슨. 23개 중 18번째.

보석을 획득하면 점수가 1 올라가지만, 시선은 구석이 아니라 보석에 가 있습니다. 짧은 팝 효과가 시선을 점수 표시기로 끌어옵니다. 아이콘이 더 커졌다가 원래 크기로 줄어듭니다.

일반 크기를 나타내는 1.0의 배율을 유지합니다. 아이템을 획득하면 배율을 1.6으로 설정하고, 매 프레임 이전과 같은 식으로 1을 향해 서서히 되돌립니다.

pop = 1.6         # 보석을 획득했을 때

pop += (1 - pop) * 0.2    # 매 프레임마다

그릴 때는 배율로 크기를 정합니다. 해당 크기로 Rect를 만들고 중심을 지정하면, 아이콘이 모서리가 아니라 가운데를 기준으로 커집니다.

size = int(20 * pop)
icon = pygame.Rect(0, 0, size, size)
icon.center = (30, 30)

크기는 즉시 커지고, 원래대로 돌아갈 때는 부드럽게 줄어듭니다. 이것이 팝 효과처럼 느껴지는 이유입니다. 0.2의 비율을 사용하면 약 0.25초 만에 원래 크기로 돌아옵니다.

이미지의 경우 pygame.transform.scale_by(image, pop)로 크기를 조정하고 같은 방식으로 Rect의 중심을 지정합니다.

challenge icon

챌린지

쉬움

보라색 보석을 클릭해 획득하세요. 금색 아이콘이 튀어나오게 만드세요:

  1. 루프 전에 pop = 1.0으로 설정하세요.
  2. 보석을 획득할 때 pop = 1.6으로 설정하세요.
  3. 매 프레임마다 부드럽게 원래 값으로 되돌리세요: pop += (1 - pop) * 0.2.
  4. 아이콘을 너비와 높이가 int(20 * pop)픽셀이 되도록 그리되, 중심은 계속 (30, 30)에 두세요.

직접 해보기

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Gem Picker")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)

coin_sound = pygame.mixer.Sound("assets/sounds/coin.ogg")
gem = pygame.Rect(300, 200, 24, 24)
score = 0

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.MOUSEBUTTONDOWN and gem.collidepoint(event.pos):
            score += 1
            coin_sound.play()
            gem.topleft = (random.randint(80, 420), random.randint(90, 300))

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (170, 90, 230), gem)
    icon = pygame.Rect(0, 0, 20, 20)
    icon.center = (30, 30)
    pygame.draw.rect(screen, (255, 200, 60), icon)
    label = font.render(f"x {score}", True, (240, 240, 240))
    screen.blit(label, (52, 20))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

사운드와 게임의 손맛의 모든 레슨

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