이 토론의 목적은 Pygame에서 마우스 위치를 향해 총알을 발사할 때 발생하는 일반적인 문제를 해결하는 것입니다. 움직이거나 불규칙한 동작을 나타내지 마십시오.
발사 시 총알의 위치와 마우스를 향한 방향 벡터를 결정해야 합니다. 그러나 제공된 코드에서는 방향 벡터를 올바르게 설정하지 않아 총알이 예측할 수 없게 움직이거나 정지 상태로 유지됩니다.
이 문제를 해결하려면 방향 벡터를 계산하고 다음과 같이 정규화(단위 벡터로 변환):
시작 위치와 마우스 위치를 얻습니다.
<code class="py">self.pos = (x, y) mx, my = pygame.mouse.get_pos()</code>
방향 벡터를 계산합니다. :
<code class="py">self.dir = (mx - x, my - y)</code>
벡터 정규화:
<code class="py">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>
벡터 각도 계산:
<code class="py">angle = math.degrees(math.atan2(-self.dir[1], self.dir[0]))</code>
방향이 결정되면 속도에 따라 총알을 회전하고 업데이트할 수 있습니다.
회전 총알:
<code class="py">self.bullet = pygame.Surface((7, 2)).convert_alpha() self.bullet.fill((255, 255, 255)) self.bullet = pygame.transform.rotate(self.bullet, angle)</code>
글머리 기호 위치 업데이트:
<code class="py">self.pos = (self.pos[0]+self.dir[0]*self.speed, self.pos[1]+self.dir[1]*self.speed)</code>
올바르게 표시하려면 회전된 총알의 경계 사각형을 사용하여 올바른 위치에 중심을 둡니다.
회전된 총알의 경계 사각형을 가져옵니다.
<code class="py">bullet_rect = self.bullet.get_rect(center = self.pos)</code>
총알 그리기:
<code class="py">surf.blit(self.bullet, bullet_rect)</code>
위 내용은 내 파이게임 총알이 마우스 쪽으로 움직이지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!