문제 설명
총알 클래스를 생성했는데도 총알이 실패합니다. 마우스 커서가 원하는 방향으로 움직입니다. 총알을 회전 및 이동하려고 하면 비정상적인 동작이 발생합니다.
해결 방법
1. 회전 및 초기화:
pygame.transform.rotate는 원래 객체를 수정하지 않지만 새로운 회전된 표면을 생성합니다. 글머리 기호를 올바르게 회전하고 초기화하려면 다음 코드를 사용하세요.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!