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.
3 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
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?-
dans player.py, j'ai créé(dans la classe player) une définition de speed_add qui rajoute 0.01 de vitesse si la variable speed est inférieur à 2
def speed_add(self):
if self.speed <= 2.0:
self.speed += 0.01
ensuite, dans main.py, dans les condition des 'si telle touche est appuyé alors...' j'ai mis comme action la définition speed_addif 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()
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 que c'est un peu plus compliqué pour l'arrêt, parce que tu ne sais pas à l'avance quand et où le player va s'arreter.
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 c'est une bonne idée, ces deux variables "can_move". que représentent-elles précisément?
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.
-
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
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.