Faire attendre une partie d'un programme seprement
balkis3005
Messages postés
9
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour
Je suis en trai nde realiser un Mrario Bros, et je rencontre un probleme : mon animation est trop rapide. Evidemment, j'ai fait mes recherches, et le meilleur moyen est d'utiliser time.sleep(seconds)
Mais le souci, c'est que si je ralenti mon animation, le reste du programme se ralenti aussi, car ils sont reliés.
l' ideal serait de faire ralentir le bout de code qui anime mon perso sans impacter le reste, mais si vous avez d'autres propositions je prends tout =)
class AnimateSprite(pygame.sprite.Sprite) :
def __init__(self) :
super().__init__()
self.image = pygame.image.load(f'MarioAnimate/Gauche/Stati/1.png')
self.current_image = 0
def animate(self, type):
self.images = animations.get(type)
self.current_image += 1
if self.current_image >= len(self.images) :
self.current_image = 0
self.image = self.images[self.current_image]
def load_animation(direction, type) :
images = []
path = f"MarioAnimate/{direction}/{type}/"
num_files = len([f for f in os.listdir(path)
if os.path.isfile(os.path.join(path, f))])
num_files2 = num_files
for num in range(1, num_files2) :
num = str(num)
image_path = path + num + '.png'
images.append(pygame.image.load(image_path))
return images
animations = {
'MariorunD' : load_animation('Droite', 'Run'), 'MariorunG' : load_animation('Gauche', 'Run'), 'MariojumpG' : load_animation('Gauche', 'Jump'), 'MariojumpD' : load_animation('Droite', 'Jump')
}
le tout relié à des self.animate('MariorunG') ou autre type, le tout actionné lors d'une entrée clavier.
exemple d'une entrée :
def move_left(self) :
left = True
last_direction = 'left'
self.position[0] -= self.speed
self.animate('MariorunG')
relié à ca :
def handle_input(self):
pressed = pygame.key.get_pressed()
if pressed[pygame.K_UP] :
self.player.move_up()
if pressed[pygame.K_DOWN] :
print('')
if pressed[pygame.K_LEFT] :
self.player.move_left()
if pressed[pygame.K_RIGHT] :
self.player.move_right()
ca etant relié a ca :
def run(self):
clock = pygame.time.Clock()
# boucle jeu
running = True
while running :
self.player.save_location()
self.handle_input()
self.update()
self.group.center(self.player.rect.center)
self.group.draw(self.screen)
pygame.display.flip()
for event in pygame.event.get() :
if event.type == pygame.QUIT :
running = False
clock.tick(130)
pygame.quit()
actionné avec ca :
import pygame
from game import Game
if __name__ == '__main__':
pygame.init()
game = Game()
game.run()
voila voila bon doliprane =)
Je suis en trai nde realiser un Mrario Bros, et je rencontre un probleme : mon animation est trop rapide. Evidemment, j'ai fait mes recherches, et le meilleur moyen est d'utiliser time.sleep(seconds)
Mais le souci, c'est que si je ralenti mon animation, le reste du programme se ralenti aussi, car ils sont reliés.
l' ideal serait de faire ralentir le bout de code qui anime mon perso sans impacter le reste, mais si vous avez d'autres propositions je prends tout =)
class AnimateSprite(pygame.sprite.Sprite) :
def __init__(self) :
super().__init__()
self.image = pygame.image.load(f'MarioAnimate/Gauche/Stati/1.png')
self.current_image = 0
def animate(self, type):
self.images = animations.get(type)
self.current_image += 1
if self.current_image >= len(self.images) :
self.current_image = 0
self.image = self.images[self.current_image]
def load_animation(direction, type) :
images = []
path = f"MarioAnimate/{direction}/{type}/"
num_files = len([f for f in os.listdir(path)
if os.path.isfile(os.path.join(path, f))])
num_files2 = num_files
for num in range(1, num_files2) :
num = str(num)
image_path = path + num + '.png'
images.append(pygame.image.load(image_path))
return images
animations = {
'MariorunD' : load_animation('Droite', 'Run'), 'MariorunG' : load_animation('Gauche', 'Run'), 'MariojumpG' : load_animation('Gauche', 'Jump'), 'MariojumpD' : load_animation('Droite', 'Jump')
}
le tout relié à des self.animate('MariorunG') ou autre type, le tout actionné lors d'une entrée clavier.
exemple d'une entrée :
def move_left(self) :
left = True
last_direction = 'left'
self.position[0] -= self.speed
self.animate('MariorunG')
relié à ca :
def handle_input(self):
pressed = pygame.key.get_pressed()
if pressed[pygame.K_UP] :
self.player.move_up()
if pressed[pygame.K_DOWN] :
print('')
if pressed[pygame.K_LEFT] :
self.player.move_left()
if pressed[pygame.K_RIGHT] :
self.player.move_right()
ca etant relié a ca :
def run(self):
clock = pygame.time.Clock()
# boucle jeu
running = True
while running :
self.player.save_location()
self.handle_input()
self.update()
self.group.center(self.player.rect.center)
self.group.draw(self.screen)
pygame.display.flip()
for event in pygame.event.get() :
if event.type == pygame.QUIT :
running = False
clock.tick(130)
pygame.quit()
actionné avec ca :
import pygame
from game import Game
if __name__ == '__main__':
pygame.init()
game = Game()
game.run()
voila voila bon doliprane =)
A voir également:
- Faire attendre une partie d'un programme seprement
- Programme demarrage windows - Guide
- Comment faire une recherche à partir d'une photo - Guide
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Mettre en veille un programme - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
3 réponses
Bonjour
En Python, l’indentation est primordiale, or par défaut le site ne la conserve pas.
Pour la conserver il faut utiliser les balises de code. Voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
On pourra commencer à essayer de t’aider quand tu auras reposté correctement ton code.
Depuis que tu t'es inscrit à chacune de tes questions un modérateur repasse derrière toi.
Fais un effort.
PS peux tu expliquer ce que veut dire "seprement"?
En Python, l’indentation est primordiale, or par défaut le site ne la conserve pas.
Pour la conserver il faut utiliser les balises de code. Voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
On pourra commencer à essayer de t’aider quand tu auras reposté correctement ton code.
Depuis que tu t'es inscrit à chacune de tes questions un modérateur repasse derrière toi.
Fais un effort.
PS peux tu expliquer ce que veut dire "seprement"?