問題陳述
儘管創建了一個子彈類,但子彈未能沿滑鼠遊標的預期方向移動。嘗試旋轉和移動子彈會導致不穩定的行為。
解決方案
1.旋轉與初始化:
pygame.transformate會修改原始對象,而是建立新的旋轉表面。要正確旋轉和初始化項目符號,請使用以下程式碼:
<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.方向和單位向量:
計算方向向量將玩家定位到老鼠位置並對其進行歸一化以獲得單位向量:
<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。位置更新:
透過速度縮放方向並將其加到目前位置來更新子彈的位置:
<code class="python">self.pos = (self.pos[0]+self.dir[0]*self.speed, self.pos[1]+self.dir[1]*self.speed)</code>
4。繪製項目符號:
要在正確的位置繪製旋轉的項目符號:
<code class="python">bullet_rect = self.bullet.get_rect(center = self.pos) surf.blit(self.bullet, bullet_rect) </code>
範例程式碼:
<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>
以上是如何在 PyGame 中使用滑鼠座標瞄準子彈?的詳細內容。更多資訊請關注PHP中文網其他相關文章!