Alleger les mouvement et déplacements
Jean
-
Jean -
Jean -
Bonjour,
je voudrais que mon personnage ne part et ne s'arrête pas brutalement quand une touche de mon ordinateur est appuyé. voici un exemple: si on est immobile et qu'on se met à courir, on ne vas pas tout de suite aller à sa vitesse maximale, pareil pour s'arrêter, on met quelques secondes pour être complètement immobile.
j'ai donc essayé et cela marche seulement pour le départ. voici mon code.
main.py:
game.py
player.py
voila j'espère que ce soit réalisable et merci de me répondre le plus rapidement possible.
je voudrais que mon personnage ne part et ne s'arrête pas brutalement quand une touche de mon ordinateur est appuyé. voici un exemple: si on est immobile et qu'on se met à courir, on ne vas pas tout de suite aller à sa vitesse maximale, pareil pour s'arrêter, on met quelques secondes pour être complètement immobile.
j'ai donc essayé et cela marche seulement pour le départ. voici mon code.
main.py:
import pygame, sys from game import Game pygame.init() screen = pygame.display.set_mode((1199, 800)) icon = pygame.image.load('icon_and_background/icon.png') pygame.display.set_caption('the game') pygame.display.set_icon(icon) game = Game running = True while running: pygame.display.flip() screen.blit(game.background_2, (0,0)) screen.blit(game.background_1, (0, 740)) screen.blit(game.player.skin, game.player.rect) if game.pressed.get(pygame.K_q) and game.player.can_move_left: game.player.can_move_right = False game.player.move_left() game.player.speed_add() if game.pressed.get(pygame.K_q) == False and game.player.can_move_right == False: if game.player.speed > 1.9: for i in range(20): game.player.speed -= 0.1 if game.player.speed < 1.9: game.player.speed = 0.1 game.player.can_move_right = True if game.pressed.get(pygame.K_d) and game.player.can_move_right: game.player.can_move_left = False game.player.move_right() game.player.speed_add() if game.pressed.get(pygame.K_d) == False and game.player.can_move_left == False: game.player.speed = 0.1 game.player.can_move_left = True '''elif game.pressed == False: game.player.speed_remove() if game.pressed.get(pygame.K_q) == False and game.player.can_move_right == False: game.player.can_move_right = True if game.pressed.get(pygame.K_d) == False and game.player.can_move_left == False: game.player.can_move_left = True ''' print(game.player.speed) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: game.pressed[event.key] = True elif event.type == pygame.KEYUP: game.pressed[event.key] = False pygame.quit() sys.exit()
game.py
import pygame from player import Player class Game(): player = Player() pressed = {} background_1 = pygame.image.load('icon_and_background/bg1.jpg') background_2 = pygame.image.load('icon_and_background/bg2.jpg)
player.py
import pygame class Player(pygame.sprite.Sprite): def __init__(self): super().__init__() self.speed = 0.1 self.skin = pygame.image.load('player/player_right.png') self.rect = self.skin.get_rect() self.rect.x = 100.0 self.posx = self.rect.x self.rect.y = 670.0 self.can_move_left = True self.can_move_right = True def move_left(self): self.posx -= self.speed self.rect.x = self.posx self.skin = pygame.image.load('player/player_left.png') def move_right(self): self.posx += self.speed self.rect.x = self.posx self.skin = pygame.image.load('player/player_right.png') def speed_add(self): if self.speed <= 2.0: self.speed += 0.01
voila j'espère que ce soit réalisable et merci de me répondre le plus rapidement possible.
A voir également:
- Alleger les mouvement et déplacements
- Alléger pdf - Guide
- Mes deplacements - Guide
- Alleger windows 10 - Guide
- Enregistrer mouvement souris reproduire - Télécharger - Divers Utilitaires
- Alleger windows 11 - Accueil - Optimisation
3 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
qu'as-tu changé dans ton code pour rendre le départ progressif?
ne peux-tu pas appliquer la même logique à l'arrivée?
qu'as-tu changé dans ton code pour rendre le départ progressif?
ne peux-tu pas appliquer la même logique à l'arrivée?
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
j'ai l'impression que tu changes de pseudo entre deux questions. est-ce exact? si oui, pourquoi fais-tu cela?
si vous pensez que le deuxième pseudo est Alex, alors oui, c'est vrai.
Je me suis mit à programmer en python en même temps que mon amis Alex, malheureusement, je n'ais plus d'ordinateur et je dois donc utiliser le sien(pour savoir, nous somme en collocation), et j'utilise ce même forum pour résoudre mes problèmes de programmation. mais le pseudo "Jean" ne reviendra plus car je compte bientôt m'acheter un nouvel ordinateur.
et aussi nous travaillons sur le même jeu que nous préparons depuis maintenant 1 mois.
Je me suis mit à programmer en python en même temps que mon amis Alex, malheureusement, je n'ais plus d'ordinateur et je dois donc utiliser le sien(pour savoir, nous somme en collocation), et j'utilise ce même forum pour résoudre mes problèmes de programmation. mais le pseudo "Jean" ne reviendra plus car je compte bientôt m'acheter un nouvel ordinateur.
et aussi nous travaillons sur le même jeu que nous préparons depuis maintenant 1 mois.
ensuite, dans main.py, dans les condition des 'si telle touche est appuyé alors...' j'ai mis comme action la définition speed_add
et pour les variables "can_move_left" et "can_move_right", j'ai du les rajouter car sinon le départ progressif ne marche pas.
j'ai essayé (et essaie toujours) de faire la même chose pour l'arrêt mais je n'y arrive pas.
j'imagine alors que, au moment où le player reçoit l'instruction de s'arreter, il va commencer à ralentir, et donc s'arreter un peu plus loin et un peu pls tard.
c'est bien cela?
je me demande si ce n'est pas mieux d'avoir une seule variable "mouvement", qui vaudrait "arrete", "vers la gauche", "vers la droite", "freinant vers la gauche", "freinant vers la droite".
je pense que la classe Player devrait faire plus de travail, qui est fait pour le moment dans main.
je suggère de modifier tout cela avant d'ajouter d'autres fonctions, sinon le programme va devenir ingérable.