Menu
CoddyTech

Jangan Berlebihan

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

Efek game seperti bumbu. Sedikit guncangan membuat pendaratan terasa berat, sedangkan terlalu banyak guncangan membuat game sulit dibaca dan bisa membuat pemain merasa mual. Dua kebiasaan ini membantu mengendalikannya.

Batasi. Saat efek menumpuk, jumlahnya bisa bertambah tanpa batas. Di sini, setiap pendaratan menambahkan 12 ke shake; empat peti yang mendarat bersamaan membuatnya melewati 40, dan tampilan meloncat 13 piksel. min() membatasi nilai maksimumnya:

shake = min(shake + 12, 18)

Sekarang, guncangan tetap berlangsung lebih lama saat peti terus mendarat, tetapi tidak pernah bergerak lebih dari 18 // 3, yaitu 6 piksel.

Biarkan pemain menonaktifkannya. Sebagian orang tidak bisa bermain saat layar bergerak. Pengaturan ini hanya membutuhkan satu variabel:

shake_on = True
...
if shake_on:
    offset = (random.randint(-amount, amount), random.randint(-amount, amount))

Gambar label setelah kamu melakukan blit pada dunia, langsung di layar. Teks yang merupakan bagian dari antarmuka harus tetap diam saat dunia berguncang.

challenge icon

Tantangan

Sedang

Tekan spasi untuk menjatuhkan peti, dan setiap kali peti mendarat, nilai shake bertambah 12. Kurangi efeknya:

  1. Ubah nilai saat peti mendarat agar shake tidak pernah melebihi 18: shake = min(shake + 12, 18).
  2. Atur shake_on = True sebelum perulangan; S akan membalik nilainya.
  3. Pilih offset acak hanya saat shake_on bernilai true.
  4. Setelah menggambar world, tampilkan Shake: On atau Shake: Off di layar pada (10, 10).

Coba sendiri

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Crate Drop")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 28)

thud_sound = pygame.mixer.Sound("assets/sounds/thud.ogg")
falling = []
landed = []
shake = 0
world = pygame.Surface((480, 360))

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            falling.append(pygame.Rect(random.randint(140, 400), -40, 40, 40))

    for crate in falling:
        crate.y += 8
        if crate.bottom >= 300:
            crate.bottom = 300
            landed.append(crate)
            thud_sound.play()
            shake += 12
    falling = [crate for crate in falling if crate.bottom < 300]

    world.fill((30, 30, 46))
    pygame.draw.rect(world, (80, 80, 100), (0, 300, 480, 60))
    pygame.draw.rect(world, (80, 160, 255), (60, 220, 30, 80))
    for crate in falling + landed:
        pygame.draw.rect(world, (170, 110, 60), crate)

    offset = (0, 0)
    if shake > 0:
        amount = shake // 3
        offset = (random.randint(-amount, amount), random.randint(-amount, amount))
        shake -= 1
    screen.fill((0, 0, 0))
    screen.blit(world, offset)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Suara dan Sensasi Bermain

Latihan sendiri: Playground Pygame