Partage
  • Partager sur Facebook
  • Partager sur Twitter

Elever une image

    19 février 2016 à 13:45:12

    Bonjour,

    je suis une totale débutante avec python et ayant pris la spécialisation ISN, je dois réaliser un projet en groupe. J'ai écrit un script qui est sensé faire bouger une image vers le haut, mais malheureusement il ne marche pas. Quand je lance le script l'image à changé de place et c'est tout. Je comprend pas ce que je dois faire afin que mon image s'élève vers le haut, et que je la vois monter.

    Mon script

    Merci pour votre aide !

    • Partager sur Facebook
    • Partager sur Twitter
      19 février 2016 à 13:53:01

      Essayes d'éviter les captures d'écran, le site dispose d'une mise en forme pour le code ;)

      ps: du coup j'ai la flemme de tout retaper à la main mais il semble que le problème vient de ta fonction anime qui n'est pas vraiment animé (valeur fixe)

      edit:

      def anime():
          global x,y
          if y>=300:
              canv.coords(x, y-1)
              y-=1
              fenetre.after(50, anime)



      à la fin de la fonction anime "fenetre.after(50, anime)" va permettre à la fenêtre de rappeler anime() toutes les 50 ms

      -
      Edité par lewisbm 19 février 2016 à 14:19:38

      • Partager sur Facebook
      • Partager sur Twitter
        19 février 2016 à 14:15:25

        Plusieurs problèmes:

        • Dans anime, il faut utiliser les variables x et y en argument de coords (et non simplement leur valeur initiale)
        • Si tu utilises coords, il faut mettre à jour x et y (sinon leur valeur reste la même)
        • On utilise global sur des variables qu'on veut modifier. Ici seule y l'est, donc pas besoin d'ajouter x
        • Pour enchaîner les mouvements, on utilise after qui va rappeler automatiquement anime au bout d'un temps choisi (ici 1000ms = 1s)
        def anime():
            global y
            if y >= 300:
                y = y - 50
                canv.coords(x, y)
                canv.after(1000, anime)  #toute les 1s la fonction est réexécutée

        Un truc comme ça devrait fonctionner ^^

        • Partager sur Facebook
        • Partager sur Twitter
        Précepte: Le mieux est l'ennemi du bien
          20 février 2016 à 12:44:12

          Bonjour, merci pour vos réponses, j'ai recommencé mon script et j'ai enfin réussi à faire sauter mon personnage. Cependant j'ai maintenant un autre problème : je dois défiler le décor (obstacles : block, mur, trou) mais dés que je fais sauter mon perso, le décor arrête de bouger puis reprend sa course une fois que mon perso et retomber à terre. Je n'arrive aussi pas à faire défiler les morceaux du décor ensemble, il n'y a que mon block qui bouge.

          from tkinter import *
          import time
          
          def anime(event):
             global x, y
             print("anime",event)
             deplacer_Vertical_Up(20,char)
             deplacer_Vertical_Down(20,char)
                
                
                 
          def deplacer_Vertical_Up(pas,objet) :
             global x, y
             while y > 250: 
                y=y-pas
                canv.coords(objet,x,y)
                time.sleep(0.01)
                canv.update()
                
          
          def deplacer_Vertical_Down(pas,objet) :
             global x, y
             while y < 635: 
                y=y+pas
                canv.coords(objet,x,y)
                time.sleep(0.01)
                canv.update()
          
          def deplacement_block(pas,objet) :
             global x1, y1
             while test==0:
                if x1>0 :
                   x1=x1-pas
                   canv.coords(objet,x1,y1)
                   time.sleep(0.01)
                   canv.update()
                else :
                   x1=1080
          
          
          def deplacement_mur(pas,objet) :
             global x2, y2
             while test==0:
                if x2>0 :
                   x2=x2-pas
                   canv.coords(objet,x2,y2)
                   time.sleep(0.01)
                   canv.update()
                else :
                   x2=1080 
             
          
          
          fenetre=Tk()
          fenetre.title("Dimension II Project")
          fenetre.geometry("1080x800")
          
          canv=Canvas(width=1080,height=800)
          fond=PhotoImage(file="fond.gif")
          canv.create_image(450,400,image=fond)
          
          x=50
          y=635
          perso=PhotoImage(file="perso.gif")
          char=canv.create_image(x,y,anchor=SW,image=perso)
          
          x1=480
          y1=635
          block=PhotoImage(file="block.gif")
          block2=canv.create_image(x1,y1,anchor=SE,image=block)
          
          x2=650
          y2=0
          mur=PhotoImage(file="mur.gif")
          mur2=canv.create_image(x2,y2,anchor=NW,image=mur)
          
          x3=900
          y3=800
          trou=PhotoImage(file="trou.gif")
          canv.create_image(x3,y3,anchor=SW,image=trou)
          
          
          canv.grid(row=0,column=0,rowspan=10,columnspan=10)
          
          
          fenetre.bind('<Up>',anime)
          test=0
          deplacement_block(5,block2)
          deplacement_mur(5,mur2)
          
          fenetre.mainloop()
          
          





          • Partager sur Facebook
          • Partager sur Twitter

          Elever une image

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown