Maison > développement back-end > Tutoriel Python > Comment viser des balles en utilisant les coordonnées de la souris dans PyGame ?

Comment viser des balles en utilisant les coordonnées de la souris dans PyGame ?

Patricia Arquette
Libérer: 2024-11-01 17:30:30
original
536 Les gens l'ont consulté

How To Aim Bullets Using Mouse Coordinates in PyGame?

Viser une balle dans PyGame à l'aide des coordonnées de la souris

Énoncé du problème

Malgré la création d'une classe de puces, les balles ne parviennent pas à déplacez-vous dans la direction prévue du curseur de la souris. Les tentatives de rotation et de déplacement des balles ont entraîné un comportement erratique.

Solution

1. Rotation et initialisation :

  • pygame.transform.rotate ne modifie pas l'objet d'origine, mais crée une nouvelle surface pivotée. Pour faire pivoter et initialiser correctement la balle, utilisez le code suivant :

    <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>
    Copier après la connexion

2. Direction et vecteur unitaire :

  • Lorsqu'une balle est tirée, la direction doit être déterminée à ce moment-là et ne pas changer continuellement.
  • Calculez le vecteur de direction à partir de le joueur à la position de la souris et normalisez-la pour obtenir un vecteur unitaire :

    <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>
    Copier après la connexion

3. Mise à jour de la position :

  • Mettez à jour la position de la balle en redimensionnant la direction en fonction d'une vitesse et en l'ajoutant à la position actuelle :

    <code class="python">self.pos = (self.pos[0]+self.dir[0]*self.speed, 
              self.pos[1]+self.dir[1]*self.speed)</code>
    Copier après la connexion

4. Dessiner la balle :

  • Pour dessiner la balle pivotée dans la bonne position :

    <code class="python">bullet_rect = self.bullet.get_rect(center = self.pos)
    surf.blit(self.bullet, bullet_rect)  </code>
    Copier après la connexion

Exemple de 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>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal