PyGame에서 총알이 마우스 커서를 향해 발사되도록 하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-02 08:49:02
원래의
349명이 탐색했습니다.

How to Make Bullets Shoot Towards the Mouse Cursor in PyGame?

PyGame에서 마우스 커서를 향해 총알을 쏘는 방법은 무엇입니까?

마우스 커서를 향해 총알을 쏘는 데 문제가 있습니다. 파이게임에서. 현재 귀하의 코드에는 Bullet 클래스 생성, 글머리 기호 추가 및 각도 계산이 포함됩니다. 그러나 총알이 예상대로 회전하거나 움직이지 않는 것을 발견했습니다. 접근 방식을 검토하고 개선해 보겠습니다.

첫째, 회전 문제는 pygame.transform.rotate가 기존 총알 객체를 업데이트하지 않고 새로운 회전 표면을 생성한다는 사실에서 비롯됩니다. 스프라이트를 제자리에서 회전하려면 sprite.image = pygame.transform.rotate(sprite.image, angle)을 사용해야 합니다.

방향을 얻으려면 플레이어와 마우스 위치가 일관되지 않은 총알 움직임을 초래합니다. 대신, 총알이 발사될 때 방향을 한 번 설정해야 합니다.

self.dir = pygame.mouse.get_rel()  # Relative movement since the last event
로그인 후 복사

방향을 정규화하고 속도를 설정하려면 다음을 수행할 수 있습니다.

dist = math.sqrt(self.dir[0]**2 + self.dir[1]**2)
self.speed = self.speed / dist
self.dir = (self.dir[0]/dist, self.dir[1]/dist)
로그인 후 복사

마지막으로 업데이트 기능의 총알 위치에 계산된 속도를 추가해야 합니다.

self.pos += self.speed[0], self.speed[1]
로그인 후 복사

다음은 언급된 개선 사항을 통합한 예입니다.

class Bullet(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((10, 10))
        self.image.fill((255, 0, 0))
        self.rect = self.image.get_rect()
        self.speed = 10

    def update(self):
        angle = math.atan2(self.dir[1], self.dir[0])
        self.image = pygame.transform.rotate(self.image, -angle * (180 / math.pi))
        self.pos += self.speed[0], self.speed[1]
        self.rect = self.image.get_rect(center=self.pos)
로그인 후 복사

위 내용은 PyGame에서 총알이 마우스 커서를 향해 발사되도록 하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿