Rumah > Artikel > pembangunan bahagian belakang > Bagaimana Untuk Membidik Peluru Menggunakan Koordinat Tetikus dalam PyGame?
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:
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!