>  기사  >  백엔드 개발  >  PyGame에서 마우스 좌표를 사용하여 총알을 조준하는 방법은 무엇입니까?

PyGame에서 마우스 좌표를 사용하여 총알을 조준하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-01 17:30:30376검색

How To Aim Bullets Using Mouse Coordinates in PyGame?

마우스 좌표를 사용하여 PyGame에서 총알 조준

문제 설명

총알 클래스를 생성했는데도 총알이 실패합니다. 마우스 커서가 원하는 방향으로 움직입니다. 총알을 회전 및 이동하려고 하면 비정상적인 동작이 발생합니다.

해결 방법

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

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