Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Gelung Permainan Pygame Saya Tidak Berfungsi dan Bagaimana Saya Boleh Melaksanakan Sistem Kamera?

Mengapa Gelung Permainan Pygame Saya Tidak Berfungsi dan Bagaimana Saya Boleh Melaksanakan Sistem Kamera?

Susan Sarandon
Susan Sarandonasal
2024-11-17 11:33:02675semak imbas

Why Is My Pygame Game Loop Not Working and How Can I Implement a Camera System?

Menyelesaikan masalah Gelung Aplikasi Pygame Bukan Fungsian

Dalam membangunkan aplikasi Pygame anda, anda telah menghadapi kesukaran dengan kefungsian gelung permainan. Khususnya, anda cuba mencipta sistem kamera tetapi mendapati bahawa tutorial lapuk tidak lagi digunakan. Artikel ini memberikan cerapan untuk menyelesaikan masalah aplikasi anda dan melaksanakan sistem kamera.

Memahami Gelung Permainan

Gelung permainan Pygame adalah penting untuk kelancaran aplikasi anda. Ia biasanya dilaksanakan dalam gelung malar, mengendalikan tugas berikut:

  • Pengendalian acara
  • Kemas kini keadaan objek (berdasarkan input dan masa)
  • Perenderan latar belakang
  • Memaparkan pemandangan (memaparkan semua objek)
  • Kemas kini skrin

Salah Faham Anda

Dalam coretan kod asal anda, anda salah tafsir proses pemaparan. Daripada melukis latar belakang pada kedudukan objek pemain, menggerakkan pemain, dan kemudian memberikan pemain itu semula, anda hanya perlu membuat latar belakang sekali dan melukis semua objek di atasnya. Pygame hanya mengemas kini paparan apabila anda memanggil pygame.display.update() atau pygame.display.flip().

Gelung Permainan Disemak

Berdasarkan cerapan ini, berikut ialah versi semakan anda gelung permainan yang memisahkan pemaparan dengan betul daripada kemas kini keadaan objek:

while 1:
    # Handle events
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

    # Update object states (based on input and time)
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        objects[0].move_left()    
    if keys[pygame.K_RIGHT]:
        objects[0].move_right()
    if keys[pygame.K_UP]:
        objects[0].move_up()
    if keys[pygame.K_DOWN]:
        objects[0].move_down()

    for num in range(num_objects - 1):
        objects[num + 1].rand_move()

    # Draw background
    screen.blit(background, (0, 0))

    # Draw scene
    for o in objects:
        screen.blit(o.image, o.pos)

    # Update display
    pygame.display.update()
    pygame.time.delay(100)

Sistem Kamera

Melaksanakan sistem kamera dalam Pygame memerlukan beberapa pertimbangan tambahan:

  • Lihat Pandangan: Tentukan kawasan pada skrin yang akan dipaparkan oleh kamera.
  • Sasaran: Tentukan objek atau lokasi yang akan diikuti oleh kamera.
  • Offset: Kira perbezaan antara sudut pandangan kamera dan kedudukan sasaran.

Dengan mengambil kira konsep ini, anda boleh melaksanakan sistem kamera asas dengan mengubah suai gelung permainan seperti berikut:

# Add camera attributes
camera_viewport = (0, 0, screen_width, screen_height)
camera_target = characters[0]

# Update game loop to follow the camera
while 1:
    # ... (same event handling and object state update)

    # Calculate camera offset
    camera_offset_x = camera_target.pos.x - camera_viewport[0] - camera_viewport[2] / 2
    camera_offset_y = camera_target.pos.y - camera_viewport[1] - camera_viewport[3] / 2
    
    # Set the camera viewport
    screen.blit(background, (camera_offset_x, camera_offset_y), camera_viewport)
    
    # Render objects relative to the camera viewport
    for o in objects:
        screen.blit(o.image, (o.pos.x - camera_offset_x, o.pos.y - camera_offset_y))
    # ... (same display update)

Pelaksanaan ini memastikan kamera mengikut sasaran, menyediakan persekitaran permainan yang dinamik.

Atas ialah kandungan terperinci Mengapa Gelung Permainan Pygame Saya Tidak Berfungsi dan Bagaimana Saya Boleh Melaksanakan Sistem Kamera?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn