- Mon sprite bug (pygames)
- Bug yahoo mail - Accueil - Mail
- Bug chatgpt - Accueil - Intelligence artificielle
- Facebook rencontre bug - Forum Facebook
- Bug snap message invisible - Forum Snapchat
- Facebook rencontre bug une pause s'impose - Forum Facebook
2 réponses
7 mars 2024 à 08:02
bonjour,
Si le joystick est légèrement déplacé, la voiture commence à se déplacer.
As-tu affiché les valeurs de direction_x et de direction_y?
Salut, je n'avais jamais testé une manette avec pygame, mais ce n'est pas plus compliqué qu'avec des touches directionnelles. Je ne comprends pas tous ces calculs.
Je suis nul en maths et en trigo, mais pygame fournit aussi quelques fonctions mathématiques pour les nullos comme moi ^^
Exemple avec une simple surface (à remplacer par ton image) représentant une voiture.
import math import pygame SCREEN_WIDTH = 800 SCREEN_HEIGHT = 600 FPS = 60 SCREEN_BG_COLOR = pygame.Color('black') class Car(pygame.sprite.Sprite): def __init__(self): super().__init__() self._image_base = pygame.Surface( (50, 25), pygame.SRCALPHA ).convert_alpha() self._image_base.fill((0, 255, 0)) pygame.draw.rect( self._image_base, (255, 255, 0), (40, 0, 10, 25) ) self.image = self._image_base.copy() self.rect = self.image.get_rect() self._angle = 0 self.speed = 5 def move(self, dx=0, dy=0): if not dx and not dy: return v1 = pygame.math.Vector2(0., 0.) v2 = pygame.math.Vector2(dx, dy) self._rotate(round(v2.angle_to(v1))) self.rect.move_ip(dx * self.speed, dy * self.speed) def _rotate(self, degrees): if self._angle == degrees: return self._angle = degrees self.image = pygame.transform.rotate( self._image_base, degrees ) # Recalcul du rect de l'image x, y = self.rect.topleft self.rect = self.image.get_rect() self.rect.topleft = x, y class Game: def __init__(self, width, height): pygame.init() self.screen = pygame.display.set_mode((width, height)) pygame.display.set_caption('Asphalt X') self.joystick = pygame.joystick.Joystick(0) self.joystick.init() self.group_display = pygame.sprite.Group() self.car = Car() self.car.rect.center = ( width // 2 - self.car.rect.w, height // 2 - self.car.rect.h ) self.group_display.add(self.car) def run(self): clock = pygame.time.Clock() running = True while running: clock.tick(FPS) for evt in pygame.event.get(): if evt.type == pygame.QUIT: running = False dx = self.joystick.get_axis(2) dy = self.joystick.get_axis(3) self.car.move(dx, dy) self.screen.fill(SCREEN_BG_COLOR) self.group_display.draw(self.screen) pygame.display.flip() pygame.quit() game = Game(800, 600) game.run()
Ce qu'il faut regarder est la méthode move et la méthode _rotate de la classe Car.
Le code est relativement simple, zieuter un peu le module math de pygame.
On pourrait définir v1 dans l'__init__ plutôt que le recalculer chaque fois.
Évite aussi ce truc chat machin =)