Bagaimana Untuk Membidik Peluru Menggunakan Koordinat Tetikus dalam PyGame?

Patricia Arquette
Lepaskan: 2024-11-01 17:30:30
asal
390 orang telah melayarinya

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>
    Salin selepas log masuk

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>
    Salin selepas log masuk

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>
    Salin selepas log masuk

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>
    Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!