Home > Backend Development > Python Tutorial > Why Are My Pygame Bullets Not Moving Towards the Mouse?

Why Are My Pygame Bullets Not Moving Towards the Mouse?

Barbara Streisand
Release: 2024-11-02 04:48:30
Original
321 people have browsed it

Why Are My Pygame Bullets Not Moving Towards the Mouse?

Bullet Trajectory in Pygame: A Troubleshooting Guide

This discussion aims to address a common issue encountered when firing bullets toward the mouse position in Pygame: the bullets either don't move or exhibit erratic behavior.

Understanding the Problem

At the time of firing, the bullet's position and the direction vector toward the mouse need to be determined. However, the code provided does not set the direction vector correctly, causing the bullets to move unpredictably or remain stationary.

Solving the Issue

To rectify this issue, the direction vector should be calculated and normalized (converted to a unit vector) as follows:

  • Obtain the starting position and mouse position:

    <code class="py">self.pos = (x, y)
    mx, my = pygame.mouse.get_pos()</code>
    Copy after login
  • Calculate the direction vector:

    <code class="py">self.dir = (mx - x, my - y)</code>
    Copy after login
  • Normalize the vector:

    <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>
    Copy after login
  • Compute the angle of the vector:

    <code class="py">angle = math.degrees(math.atan2(-self.dir[1], self.dir[0]))</code>
    Copy after login

Rotating and Updating the Bullet

Once the direction is determined, the bullet can be rotated and updated according to its velocity:

  • Rotate the bullet:

    <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>
    Copy after login
  • Update the bullet's position:

    <code class="py">self.pos = (self.pos[0]+self.dir[0]*self.speed, 
              self.pos[1]+self.dir[1]*self.speed)</code>
    Copy after login

Drawing the Rotated Bullet

To correctly display the rotated bullet, its bounding rectangle is used to center it at its correct position:

  • Get the rotated bullet's bounding rectangle:

    <code class="py">bullet_rect = self.bullet.get_rect(center = self.pos)</code>
    Copy after login
  • Draw the bullet:

    <code class="py">surf.blit(self.bullet, bullet_rect)</code>
    Copy after login

The above is the detailed content of Why Are My Pygame Bullets Not Moving Towards the Mouse?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template