Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Untuk Membidik Peluru Menggunakan Koordinat Tetikus dalam PyGame?

Bagaimana Untuk Membidik Peluru Menggunakan Koordinat Tetikus dalam PyGame?

Patricia Arquette
Patricia Arquetteasal
2024-11-01 17:30:30376semak imbas

How To Aim Bullets Using Mouse Coordinates in PyGame?

Mensasarkan Peluru dalam PyGame Menggunakan Koordinat Tetikus

Pernyataan Masalah

Walaupun mencipta kelas peluru, peluru gagal bergerak ke arah kursor tetikus yang dimaksudkan. Percubaan untuk memutar dan menggerakkan peluru mengakibatkan tingkah laku tidak menentu.

Penyelesaian

1. Putaran dan Permulaan:

  • pygame.transform.rotate tidak mengubah suai objek asal, tetapi mencipta permukaan berputar baharu. Untuk memutar dan memulakan peluru dengan betul, gunakan kod berikut:

    <code class="python">angle = math.degrees(math.atan2(-self.dir[1], self.dir[0]))
    
    self.bullet = pygame.Surface((7, 2)).convert_alpha()
    self.bullet.fill((255, 255, 255))
    self.bullet = pygame.transform.rotate(self.bullet, angle)</code>

2. Vektor Arah dan Unit:

  • Apabila peluru dilepaskan, arah harus ditentukan pada saat itu dan tidak berubah secara berterusan.
  • Kira vektor arah dari pemain ke kedudukan tetikus dan normalkannya untuk mendapatkan vektor unit:

    <code class="python">mx, my = pygame.mouse.get_pos()
    self.dir = (mx - x, my - y)
    length = math.hypot(*self.dir)
    if length == 0.0:
      self.dir = (0, -1)
    else:
      self.dir = (self.dir[0]/length, self.dir[1]/length)</code>

3. Kemas Kini Kedudukan:

  • Kemas kini kedudukan peluru dengan menskalakan arah mengikut halaju dan menambahnya pada kedudukan semasa:

    <code class="python">self.pos = (self.pos[0]+self.dir[0]*self.speed, 
              self.pos[1]+self.dir[1]*self.speed)</code>

4. Melukis Peluru:

  • Untuk melukis peluru yang diputar pada kedudukan yang betul:

    <code class="python">bullet_rect = self.bullet.get_rect(center = self.pos)
    surf.blit(self.bullet, bullet_rect)  </code>

Kod Contoh:

<code class="python">import pygame
import math

class Bullet:
    def __init__(self, x, y):
        # Calculate direction and rotation
        ...

        # Create the bullet surface
        ...

    def update(self):
        # Update bullet position
        ...

    def draw(self, surf):
        # Draw the rotated bullet
        ...

bullets = []
pos = (250, 250)
run = True
while run:
    # Game loop
    ...

    for bullet in bullets[:]:
        # Update bullets
        ...

    # Draw the scene
    ...</code>

Atas ialah kandungan terperinci Bagaimana Untuk Membidik Peluru Menggunakan Koordinat Tetikus dalam PyGame?. 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