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 11 - Accueil - Optimisation
- Alleger windows 10 - Guide
- Enregistrer mouvement souris reproduire - Télécharger - Divers Utilitaires
3 réponses
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
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
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
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.