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