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.
Tantangan
SedangTekan spasi untuk menjatuhkan peti, dan setiap kali peti mendarat, nilai shake bertambah 12. Kurangi efeknya:
- Ubah nilai saat peti mendarat agar
shaketidak pernah melebihi 18:shake = min(shake + 12, 18). - Atur
shake_on = Truesebelum perulangan; S akan membalik nilainya. - Pilih offset acak hanya saat
shake_onbernilai true. - Setelah menggambar world, tampilkan
Shake: OnatauShake: Offdi 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()
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Suara dan Sensasi Bermain
4Guncangan Layar dan Kilatan Saat Terkena Serangan
Guncangan LayarKilatan Saat Terkena SeranganJeda BenturanJangan BerlebihanLatihan sendiri: Playground Pygame