IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation multimédia/Jeux Python Discussion :

[pygame] Programmation saut, blocage, attaque, attendre pour animation fluide


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 70
    Points : 65
    Points
    65
    Par défaut [pygame] Programmation saut, blocage, attaque, attendre pour animation fluide
    Bonjour,

    Je Cherche à obtenir une solution à mon problème, je cherche à faire sauter un sprite de personnage, pour l'instant, j'ai ce code qui répond sur le fait de sauter quand la flèche du haut est enfoncé et il redescend quand la flèche est relaché mais j'aimerai que cela soit au bout d'un certain temps pour pas "tricher" et rester en l'air le temps qu'on reste appuyer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    def jeu():
        # Par défaut pas de game over
        lvl = 0
        game_over = False
     
     
        #animation du chevalier
        animationx = 0
     
        # initialisation des variables de déplacements et de position
        knightx = 50
        knighty = 180
        x_mouvement = 0
        y_mouvement = 0
     
        # Temps qui s'écoule
        temps = pygame.time.Clock()
     
        while not game_over: # tant que le jeu n'est pas fini on ne ferme pas la fenêtre
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    game_over = True
     
                # déplacements verticaux (avancer et reculer)
                if event.type == pygame.KEYDOWN:
                    if (event.key == pygame.K_LEFT and knightx > 0):
                        x_mouvement = -10
                        if animationx == 0:
                            animationx = 294
                        else:
                            animationx -= 42
                        knightx += x_mouvement
     
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_RIGHT:
                        x_mouvement = +10
                        if animationx == 294:
                            animationx = 0
                        else:
                            animationx += 42
                        knightx += x_mouvement
     
                # Actualisation des mouvements
                x_mouvement = 0
     
                # Saut
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_UP:
                        y_mouvement = -30
                if event.type == pygame.KEYUP:
                    if event.key == pygame.K_UP:
                        y_mouvement = 30
     
                # Actualisation des mouvements
                knighty += y_mouvement
                y_mouvement = 0
     
                # blocage
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_DOWN:
                        knight = sprite_knight_block.subsurface(252, 0, 42, 42)
     
                else:
                    knight = sprite_knight.subsurface(animationx, 0, 42, 42)
     
                # Attaque
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_SPACE:
                        knight = sprite_knight_attack.subsurface(420, 0, 42, 42)
    Les sprite font référence à une image présente dans mon dossier et j'ai le même souci pour les attaques et les blocages car si je pouvais les ralentir, je pourrais en faire des animations plus fluides. Ce qui m'aiderat aussi plus tard pour programmer les ennemis. Merci d'avance

    PS : J'ai essayé des choses du genre : pygame.time.wait(100) ou time.sleep(100) mais ça me ralentit mon programme en général en attendant pour toute les actions

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    En théorie (voir cet article) on ne va pas utiliser le pygame.event.get (ni le pygame.event.poll). On utilisera à la place, les fonctions pour récupérer les états des périphériques de jeu (ici, le clavier). Ainsi, à chaque tour dans la boucle principale, on va faire les actions en adéquation avec les touches actuellement en appui, avec pygame.key.get_pressed().
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 70
    Points : 65
    Points
    65
    Par défaut
    Oui, mais du coup, il pourra quand même rester en l'air, une fois, le bouton pressé ? Et qu'est-ce que veux dire en "théorie" ? Je n'utilise pas la bonne méthode ?

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 575
    Points
    218 575
    Billets dans le blog
    120
    Par défaut
    Le en théorie, c'est : pour un jeu avec animation fluide, on ne va pas utiliser un get (c'est plutôt certain), un poll (cela fonctionne, mais ce n'est pas ce que l'on fait pour un jeu, car y a plus simple). Maintenant, je ne connais pas 100 % votre besoin, je donne juste des conseils.
    Pour le fait de rester en l'air, j'utiliserai une variable pour indiquer qu'il doit être en l'air. Et je remets la variable à False, lorsque je veux le refaire descendre (donc une variable qui représente son état).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 70
    Points : 65
    Points
    65
    Par défaut
    Merci de votre réponse, en effet, cela répondrait au besoin de faire retomber le personnage avec un variable booléenne, mais cependant mon jeu est plus "facile" si je permet de rester en l'air donc je vais laisser la possibilité au joueur, merci bien !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Temps de chargement trop long pour animation légère
    Par CharlyMops dans le forum Flash
    Réponses: 1
    Dernier message: 27/09/2006, 07h13
  2. Son Pour animer les bouttons
    Par jamdinhe dans le forum Delphi
    Réponses: 10
    Dernier message: 21/07/2006, 14h13
  3. 1 script, pour animer une image, qui en regroupe 3 scripts
    Par vampyer972 dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 09/04/2006, 00h06
  4. [Outils][C#] Quelle solution pour Animations 2D de Jeux ?
    Par orelero dans le forum EDI/Outils
    Réponses: 2
    Dernier message: 01/02/2006, 18h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo