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 frameSaat 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.
Tantangan
MudahKlik gem ungu untuk mengambilnya. Buat ikon emas membesar:
- Buat
pop = 1.0sebelum perulangan. - Atur
pop = 1.6saat gem diambil. - Pada setiap frame, kembalikan secara bertahap:
pop += (1 - pop) * 0.2. - 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
4Guncangan Layar dan Kilatan Saat Terkena Serangan
Guncangan LayarKilatan Saat Terkena SeranganJeda BenturanJangan Berlebihan5Gerakan Halus
Bergerak Menuju TargetKamera yang HalusEfek Pop saat DiambilGerakan Halus pada Frame Rate Apa PunLatihan sendiri: Playground Pygame