Menu
CoddyTech

Efek Pop saat Diambil

Termasuk bagian Suara dan Sensasi Bermain dalam perjalanan Pygame di Coddy. Pelajaran 18 dari 23.

Saat kamu mengumpulkan permata, skor bertambah satu, tetapi perhatianmu tertuju pada permata, bukan pada pojok layar. Efek membesar sesaat menarik perhatian ke penghitung: ikonnya membesar, lalu menyusut kembali ke ukuran semula.

Simpan skala, dengan 1.0 untuk ukuran normal. Saat permata diambil, atur nilainya menjadi 1.6; setiap frame, skala perlahan kembali ke 1 menggunakan baris yang sama seperti sebelumnya:

pop = 1.6         # saat permata dikumpulkan

pop += (1 - pop) * 0.2    # setiap frame

Saat menggambar, skala menentukan ukurannya. Buat Rect dengan ukuran tersebut, lalu tempatkan titik tengahnya agar ikon membesar dari tengah, bukan dari pojoknya:

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

Ikon langsung membesar, lalu kembali dengan perlahan. Efek inilah yang membuatnya tampak membesar sesaat: fraksi 0.2 mengembalikannya dalam waktu sekitar seperempat detik.

Untuk gambar, ubah ukurannya dengan pygame.transform.scale_by(image, pop) dan tempatkan titik tengah Rect-nya dengan cara yang sama.

challenge icon

Tantangan

Mudah

Klik gem ungu untuk mengambilnya. Buat ikon emas membesar:

  1. Buat pop = 1.0 sebelum perulangan.
  2. Atur pop = 1.6 saat gem diambil.
  3. Pada setiap frame, kembalikan secara bertahap: pop += (1 - pop) * 0.2.
  4. Gambar ikon dengan lebar dan tinggi int(20 * pop) piksel, tetap di tengah pada (30, 30).

Coba sendiri

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

Semua pelajaran di Suara dan Sensasi Bermain

Latihan sendiri: Playground Pygame