>  기사  >  백엔드 개발  >  내 파이게임 총알이 마우스 쪽으로 움직이지 않는 이유는 무엇입니까?

내 파이게임 총알이 마우스 쪽으로 움직이지 않는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-02 04:48:30233검색

Why Are My Pygame Bullets Not Moving Towards the Mouse?

Pygame의 총알 궤적: 문제 해결 가이드

이 토론의 목적은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.