Crunchez vos adresses URL
|
Rejoignez notre discord
|
Hébergez vos photos
Affichage des résultats 1 à 10 sur 10
  1. #1
    Bonjour, je m'appelle Hugo je suis en Terminale S spé ISN et j'ai besoin de votre aide pour mon projet de fin d'année:
    J'ai pour l'instant fait des essais peu concluant. Nous cherchons à faire un RPG style zelda 1 et j'essaye de faire un système d'attaque ressemblant où le but est simple: on appuie sur un bouton d'attaque et une flèche part depuis le personnage jusqu'à un ennemi ou un mur.
    J'ai donc fait la fonction suivante:

    Code:
    def animation():    #Touches: liste contenant les évènement du clavier
        #x,y : coordonnés du sprite du personnage
        global x,y, Touches
        if len(Touches) >0:
            for touche in Touches:
                if touche=="Up" and y>60 or touche == "z" and y>60  :
                        y -=40
                elif touche=="Left" and x>80 or touche == "q"  and x>80:
                        x -=40
                elif touche=="Right" and x<940 or touche=="d" and x<940:
                        x +=40
                elif touche =="Down" and y<620 or touche=="s" and y<620:
                        y +=40
                Fond.coords(perso,x,y)
                if touche == "b":
                    print('ça marche un peu')
                    coordx,coordy = x,y
                    i = Fond.create_rectangle(coordx,coordy,coordx+40,coordy-10, fill="black")
                    while coordx <940:
                        print("ça marche ?")
                        coordx+=40
                        coordy+=40
                        Fond.coords(i,coordx,coordy,coordx+40,coordy-10)
        win.after(150,animation)
    La première partie fonctionne sans soucis, mais j'ai besoin d'aide à partir pour :
    Code:
    if touche == "b":                print('ça marche un peu')
                    coordx,coordy = x,y
                    i = Fond.create_rectangle(coordx,coordy,coordx+40,coordy-10, fill="black")
                    while coordx <940:
                        print("ça marche ?")
                        coordx+=40
                        coordy+=40
                        Fond.coords(i,coordx,coordy,coordx+40,coordy-10)
    En fait le rectangle(qui symbolise la flèche nespa) est créé mais il se déplace "trop vite".
    J'ai essayé plusieurs alternative (time.sleep(ne fonctionne pas car fait pause sur tout le programme = on ne peux plus se déplacer pendant le sleep), mettre le déplacement d'attaque dans une autre fonction et mettre cette fonction dans une autre pour utiliser .after pendant cette fonction) et en vain.
    Je souhaiterai donc avoir votre avis sur le sujet et si possible au moins une piste de recherche, merci d'avance

  2. #2
    L'idée habituelle, c'est d'utiliser l'horloge et une vitesse :

    A chaque tour de boucle, tu calcules deltaT, le temps qui s'est écoulé depuis la dernière boucle, puis tu fais avancer le mobile de deltaT*vitesse. Et tu utilises un nombre flottant pour enregistrer la position "théorique", que tu arrondis au pixel près pour l'affichage.

  3. #3
    Il faudrai que j'essaye de fouiller du côté du module time ?

  4. #4
    Un truc du genre dans ta boucle principale :

    Code:
    currentTime = time.time() 
    deltaTime = currentTime -previousTime
    previousTime = currentTime
    En ayant initialisé previousTime au début.

    A voir si la précision est suffisante

  5. #5
    Citation Envoyé par Enyss Voir le message
    Un truc du genre dans ta boucle principale :

    Code:
    currentTime = time.time() 
    deltaTime = currentTime -previousTime
    previousTime = currentTime
    En ayant initialisé previousTime au début.

    A voir si la précision est suffisante
    Je ne connais pas le python, mais la partie :
    Code:
    while coordx <940:
    ne me semble pas correcte. La boucle while va être gérée d'un coup, alors qu'il faut mettre à jour les coordonnées de la flèche dans la boucle principale.

    Ma proposition :
    Appuyer sur 'b' passe un booléen arrowShot à true
    Si arrowShot == true alors
    mettre à jour les coordonnées (x,y) de la flèche
    dessiner la flèche à l'écran

    De la même façon, en l'état, si tu appuies sur une touche de mouvement, alors les coordonnées changent très rapidement jusqu'au min/max défini, non ?

    Pour moi, il faut que tu définisses les vitesses de déplacement, du PJ et de la flèche, et que tu mettes à jour leurs coordonnées, à chaque passage dans la boucle principale, avec position = position précédente + v * deltaT, en calculant le temps de la façon décrite par Enyss. Comme ça tu contrôles à quelle vitesse le joueur ou la flèche se déplace, et ça ne dépend plus du nombre de boucles/secondes ou de la fréquence d'affichage.

  6. #6
    Tu n’as pas accès au module pygame ?
    une balle, un imp (Newstuff #491, Edge, Duke it out in Doom, John Romero, DoomeD again)
    Canard zizique : q 4, c, d, c, g, n , t-s, l, d, s, r, t, d, s, c, jv, c, g, b, p, b, m, c, 8 b, a, a-g, b, BOF, BOJV, c, c, c, c, e, e 80, e b, é, e, f, f, f, h r, i, J, j, m-u, m, m s, n, o, p, p-r, p, r, r r, r, r p, s, s d, t, t
    Canard lecture

  7. #7
    Citation Envoyé par ducon Voir le message
    Tu n’as pas accès au module pygame ?
    Si ^^, mais je ne le connais pas tellement.

    Citation Envoyé par LaVaBo Voir le message
    Appuyer sur 'b' passe un booléen arrowShot à true
    Si arrowShot == true alors
    mettre à jour les coordonnées (x,y) de la flèche
    dessiner la flèche à l'écran
    Ta solution est pertinente. Après une longue réflexion commune on a décidé que le mieux était de faire une énorme liste contenant absolument tous les objets graphiques et comme ça pour chaque boucle qui fait un déplacement on vérifie si les déplacements du prochains moove ne sont pas dans la liste justement

  8. #8
    Même moi, j’ai réussi à m’en servir.
    une balle, un imp (Newstuff #491, Edge, Duke it out in Doom, John Romero, DoomeD again)
    Canard zizique : q 4, c, d, c, g, n , t-s, l, d, s, r, t, d, s, c, jv, c, g, b, p, b, m, c, 8 b, a, a-g, b, BOF, BOJV, c, c, c, c, e, e 80, e b, é, e, f, f, f, h r, i, J, j, m-u, m, m s, n, o, p, p-r, p, r, r r, r, r p, s, s d, t, t
    Canard lecture

  9. #9
    Citation Envoyé par ducon Voir le message
    Même moi, j’ai réussi à m’en servir.
    Et du coup tu me conseille de faire quoi xD ?

  10. #10
    Essaie quand même pygame, tu trouves sur le net des scripts qui fonctionnent.
    une balle, un imp (Newstuff #491, Edge, Duke it out in Doom, John Romero, DoomeD again)
    Canard zizique : q 4, c, d, c, g, n , t-s, l, d, s, r, t, d, s, c, jv, c, g, b, p, b, m, c, 8 b, a, a-g, b, BOF, BOJV, c, c, c, c, e, e 80, e b, é, e, f, f, f, h r, i, J, j, m-u, m, m s, n, o, p, p-r, p, r, r r, r, r p, s, s d, t, t
    Canard lecture

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •