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

Patricia Arquette
풀어 주다: 2024-11-01 17:30:30
원래의
390명이 탐색했습니다.

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

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