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 :

Probleme chute d'une balle


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 7
    Par défaut Probleme chute d'une balle
    Bonjour, je vous remercie d'ava,ce pour votre aide.
    Mon problème est le suivant : je suis étudiant et je suis sensé programmer en python la chute d'une balle seulement ce que j'ai fait jusqu'à present ne marche pas vraiment comme je le voudrais.
    Pourriez vous me dire ce qu'il ne va pas?(j'ai mis en rouge les points précis ou je pense qu'il y a un probleme). Désolé pour la présentation...


    Vecteurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Vecteur :
      def __init__(self, _x=0.0, _y=0.0):
        self.x = _x
        self.y = _y
     
      def mulScalaire(self, _fScalaire):
        self.x *= _fScalaire
        self.y *= _fScalaire
     
      def addVecteur(self, _vVecteur):
        self.x += _vVecteur.x
        self.y += _vVecteur.y
    Balle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    from Vecteur import *
     
    class Balle:
      def __init__(self, _x=0.0, _y=0.0,\
                   _rayon=10.0, _masse=10.0,\
                   _xVitesse=0.0, _yVitesse=0.0):
        self.mPosition=Vecteur(_x, _y)
        self.mVitesse=Vecteur(_xVitesse, _yVitesse)
        self.mRayon=_rayon
        self.mMasse=_masse
    projet:
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    from Tkinter import *
    from Balle import *
     
     
    def marche():
      calculer()
      dessiner()
      global marche
      marche=1
     
    def arret():
      global marche
      marche=0
     
    def calculer():
      global ballesPassees
      ballesPassees=[ Balle(_x=derniereBalle.mPosition.x,\
                                   _y=derniereBalle.mPosition.y,\
                                   _rayon=derniereBalle.mRayon,\
                                   _masse=derniereBalle.mMasse,\
                                   _xVitesse=derniereBalle.mVitesse.x,\
                                   _yVitesse=derniereBalle.mVitesse.y)]
     
      global fGravite, iIntervalleTempsMS, fIntervalleTemps
      fGravite=-9.8
      iIntervalleTempsMS=100
      fIntervalleTemps=iIntervalleTempsMS * 0.001
     
      global iIndexTemps
      iIndexTemps=0
     
      while derniereBalle.mPosition.x < fResolutionHorizontale \
        and derniereBalle.mPosition.x > 0.0 \
        and derniereBalle.mPosition.y > 0.0 \
        and iIndexTemps < 10000:
     
        derniereBalle.mVitesse.y += fGravite * fIntervalleTemps
     
        tempVitesseAAppliquer = Vecteur(derniereBalle.mVitesse.x, derniereBalle.mVitesse.y)
        tempVitesseAAppliquer.mulScalaire(fIntervalleTemps)
        derniereBalle.mPosition.addVecteur(tempVitesseAAppliquer)
     
        ajoutduneBalle = Balle(_x=derniereBalle.mPosition.x,\
                               _y=derniereBalle.mPosition.y,\
                               _rayon=derniereBalle.mRayon,\
                               _masse=derniereBalle.mMasse,\
                               _xVitesse=derniereBalle.mVitesse.x,\
                               _yVitesse=derniereBalle.mVitesse.y)
        ballesPassees.append(ajoutduneBalle)
     
     
        fenetre.coords(cercleDessinee, ballesPassees[iIndexTemps].mPosition.x - ballesPassees[iIndexTemps].mRayon,\
                                     fResolutionVerticale - (ballesPassees[iIndexTemps].mPosition.y) - ballesPassees[iIndexTemps].mRayon,\
                                     ballesPassees[iIndexTemps].mPosition.x + ballesPassees[iIndexTemps].mRayon,\
                                     fResolutionVerticale - (ballesPassees[iIndexTemps].mPosition.y) + ballesPassees[iIndexTemps].mRayon)
     
        iIndexTemps += 1
     
     
    def dessiner():
      dessinerUneTrame(1)
     
     
    #L AFFICHAGE DE LA BALLE NE SE MET A JOUR QU A LA FIN et pas entre chaque appel d'after, POURQUOI ?
    def dessinerUneTrame(iIndexTempsAffichage):
     
      global iIntervalleTempsMS, cercleDessinee, ballesPassees, marche
      fenetre.coords(cercleDessinee, ballesPassees[iIndexTempsAffichage].mPosition.x - ballesPassees[iIndexTempsAffichage].mRayon,\
                                     fResolutionVerticale - (ballesPassees[iIndexTempsAffichage].mPosition.y) - ballesPassees[iIndexTempsAffichage].mRayon,\
                                     ballesPassees[iIndexTempsAffichage].mPosition.x + ballesPassees[iIndexTempsAffichage].mRayon,\
                                     fResolutionVerticale - (ballesPassees[iIndexTempsAffichage].mPosition.y) + ballesPassees[iIndexTempsAffichage].mRayon)
      print(ballesPassees[iIndexTempsAffichage].mPosition.x)
      print(fResolutionVerticale - (ballesPassees[iIndexTempsAffichage].mPosition.y) + ballesPassees[iIndexTempsAffichage].mRayon) #l'impression des coordonnes donne bien les bonnes valeurs
      if ( iIndexTempsAffichage < iIndexTemps and marche > 0): #si on change iIndexTemps pour par exemple arreter l'affichage de la simu a la moitie, la balle est bien affichee au bon endroit
        fenetre.after(iIntervalleTempsMS, dessinerUneTrame(iIndexTempsAffichage+1))
     
     
     
    global fResolutionVerticale, fResolutionHorizontale
    fResolutionVerticale=480.0
    fResolutionHorizontale=640.0
     
    interface=Tk()
    global fenetre
    fenetre=Canvas(interface,width=fResolutionHorizontale,height=fResolutionVerticale,bg='ivory')
    fenetre.pack(side=TOP,padx=5,pady=5)
     
    global derniereBalle
    derniereBalle=Balle(_x=50.0, _y=430.0, _rayon=10.0)
    global cercleDessinee
    cercleDessinee = fenetre.create_oval(derniereBalle.mPosition.x-derniereBalle.mRayon,fResolutionVerticale - (derniereBalle.mPosition.y)-derniereBalle.mRayon,\
                                         derniereBalle.mPosition.x+derniereBalle.mRayon,fResolutionVerticale - (derniereBalle.mPosition.y)+derniereBalle.mRayon,outline='black')
     
    bouton1=Button(interface,text='marche',command=marche)
    bouton1.pack(side=LEFT,padx=5,pady=5)
    bouton2=Button(interface,text='arret',command=arret)
    bouton2.pack(side=LEFT,padx=20,pady=5)
    interface.mainloop

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Difficile à dire sans indentation (pense aux balises code).

    Cela ressemble fort à un comportement normal : si python tombe sur un traitement (une condition while ?) (celui de calculer() ? pas le temps de refaire l'indentation) il attend la fin du traitement. Donc ton programme attend la fin d'un traitement pour ton fenetre.coords.

    Pense aussi à .update() pour rafraichir ta fenêtre.

    De plus pourquoi fenetre.coords dans calculer() puis dessinerUneTrame ?

    Pourquoi séparer le calcul du déplacement dans marche() ?

    Un exemple simpliste de déplacement de balle et un autre sur la mise à jour.

    @+

Discussions similaires

  1. Programmation chute d'une balle le long d'une pente
    Par leandro95 dans le forum Général Java
    Réponses: 1
    Dernier message: 07/02/2015, 03h40
  2. probleme redimensionnement d'une image
    Par meteor4 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 29/11/2004, 13h58
  3. Mkisofs - problème pour créer une image
    Par tomnie dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 04/08/2004, 11h44
  4. Réponses: 13
    Dernier message: 10/05/2004, 16h49
  5. Réponses: 2
    Dernier message: 08/08/2003, 17h30

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