Menu
CoddyTech

Kamera yang Halus

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

Kamera dalam game jalanan ini terpaku pada pemain: apa pun yang dilakukan pemain, pemain tetap berada di tengah layar dan dunia bergeser di bawahnya. Cara ini berfungsi, tetapi setiap kali mulai dan berhenti, seluruh tampilan tersentak.

Buat kamera mengikuti dengan easing yang sama seperti lingkaran. Targetnya adalah posisi yang akan menempatkan pemain di tengah:

camera_x += (player.centerx - 240 - camera_x) * 0.1
camera_x = max(0, min(camera_x, WORLD_WIDTH - 480))

Pemain bergerak seperti sebelumnya, hanya tampilannya yang bergerak dengan easing. Saat pemain mulai berlari, kamera sedikit tertinggal, sehingga pemain berlari melewati bagian tengah. Saat pemain berhenti, kamera meluncur untuk menyusul dan akhirnya kembali menempatkan pemain di tengah. Baris kedua tetap menjaga kamera berada di dalam dunia.

Dunia digambar pada -int(camera_x) seperti sebelumnya. Sekarang camera_x adalah angka desimal; int() menjaga gambar tetap pada piksel utuh, sementara variabelnya menyimpan nilai persis untuk frame berikutnya.

Panel menu yang meluncur masuk, bilah kesehatan yang terkuras, skor yang terus bertambah: apa pun yang bergerak menuju nilai baru dapat menggunakan easing dengan cara yang sama.

challenge icon

Tantangan

Sedang

Buat kamera mengikuti dengan mulus: ganti camera_x = player.centerx - 240 dengan baris yang menggerakkan camera_x sepersepuluh jarak menuju player.centerx - 240 pada setiap frame. Pertahankan baris yang membatasinya.

Coba sendiri

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Long Road")
clock = pygame.time.Clock()

WORLD_WIDTH = 1440
player = pygame.Rect(220, 240, 40, 40)
camera_x = 0

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player.x -= 6
    if keys[pygame.K_RIGHT]:
        player.x += 6
    player.left = max(player.left, 0)
    player.right = min(player.right, WORLD_WIDTH)

    camera_x = player.centerx - 240
    camera_x = max(0, min(camera_x, WORLD_WIDTH - 480))

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 80, 100), (0, 280, 480, 80))
    for post_x in range(0, WORLD_WIDTH, 120):
        pygame.draw.rect(screen, (80, 160, 255), (post_x - int(camera_x), 220, 20, 60))
    pygame.draw.rect(screen, (90, 200, 120), player.move(-int(camera_x), 0))
    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