ralentissement d'un jeu

ralentissement d'un jeu - Python - Programmation

Marsh Posté le 17-10-2006 à 23:37:42    

bonjour,
 
je me suis mis au python depuis quelques semaines, et avec mes modestes connaissances g programmé un tetris.
Tout marche comme je le veux mais je rencontre un souci dont je ne connais pas la cause.
 
En fait le jeu se deroule bien (les pieces tombes a une vitesse bien definie, le jeu est bien reactif quand on bouge les pieces avec le clavier etc...)
mais plus le temps passe, plus ca ralentit, moins c'est fluide, moins les réactions claviers/mouvement des pieces sont instantanés, en fait ca rame... si bien qu'après quelques minutes ca devient injouable !  :heink:  
 
je ne sais pas a quoi c'est dû, g pensé que ca pouvait etre un probleme de memoire, etant donné que je manipule pas mal de tableau, mais normalement (si je comprends bien ce que g fais lol) je ne crée pas de nouveaux tableaux apres l'initialisation du jeu, j'ecrase simplement les tableaux existants, ou bien je modifie juste certaines valeur, bref a priori ca ne devrait pas remplir la mémoire...
 
voila j'aimerais savoir si vous avez une piste, si besoin je peux poster le code mais bon c un peu long lol  :sarcastic:


Message édité par cosi le 17-10-2006 à 23:38:28
Reply

Marsh Posté le 17-10-2006 à 23:37:42   

Reply

Marsh Posté le 17-10-2006 à 23:44:58    

surement un probleme dallocation memoire
tu peut aller voir dans la liste des process pour voir si lutilisation memoire de ton jeu (python.exe ou que sait -je) augmente en meme temps que le reste.... (je ne c pas si python est garbage collector mais tu peu tjs verifier ca...)
 
peut etre aussi que tu appelle certaines fonctionne de lapi qui necessite un desalloc a chaque fois...

Reply

Marsh Posté le 17-10-2006 à 23:57:48    

effectivement, le pourcentage d'utilisation systeme du processus augmente considerablement au cours de la partie    
au debut je suis entre 3 et 10% et 3 minutes plus tard entre 40 et 70 % :sweat:
 
je ne sais pas ce qu'est un desalloc, de même que l'api  :whistle: j'imagine que ca correspond a tous les modules de python ?
j'utilise surtout des fonctions du module Tkinter sinon je vois pas :(


Message édité par cosi le 17-10-2006 à 23:58:25
Reply

Marsh Posté le 18-10-2006 à 00:21:19    

M'est avis que tu conserves les pièces quelque part indéfiniment (genre dans un array), donc elles ne sont jamais considérées comme "perdues", et donc elles ne sont jamais reclaimées (Python ne peut pas les détruire définitivement)


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
Reply

Marsh Posté le 18-10-2006 à 00:43:32    

c'etait ce qui m'est venu a l'idée, seulement il me semble que vu ce que g fais, ce n'est pas le cas
 
 
g une classe piece :
 

Code :
  1. class Piece:
  2.    
  3.     def __init__(self):
  4.        
  5.         self.number=randint(0,6)
  6.         self.currentposition=0
  7.         self.color="red"
  8.        
  9.         self.matrix=[[False,False,False,False],[False,False,False,False],[False,False,False,False],[False,False,False,False]]
  10.     def makesamepiece(self,p):
  11.         p.currentposition=self.currentposition
  12.         p.number=self.number
  13.         p.constructpiece()
  14.     def constructpiece(self):
  15.         if self.number==0:
  16.             self.color="red"
  17.             self.matrix[1][1]=True
  18.             self.matrix[1][2]=True
  19.             self.matrix[2][1]=True
  20.             self.matrix[2][2]=True
  21.            
  22.         if self.number==1:
  23.             self.color="yellow"
  24.             self.matrix[1]=[True,True,True,True]
  25.         if self.number==2:
  26.             self.color="orange"
  27.             self.matrix[1][1]=True
  28.             self.matrix[1][2]=True
  29.             self.matrix[2][2]=True
  30.             self.matrix[2][3]=True
  31.         if self.number==3:
  32.             self.color="pink"
  33.             self.matrix[1][1]=True
  34.             self.matrix[1][2]=True
  35.             self.matrix[2][0]=True
  36.             self.matrix[2][1]=True
  37.            
  38.         if self.number==4:
  39.             self.color="green"
  40.             self.matrix[1][3]=True
  41.             self.matrix[2][1]=True
  42.             self.matrix[2][2]=True
  43.             self.matrix[2][3]=True
  44.         if self.number==5:
  45.             self.color="purple"
  46.             self.matrix[1][0]=True
  47.             self.matrix[2][0]=True
  48.             self.matrix[2][1]=True
  49.             self.matrix[2][2]=True
  50.         if self.number==6:
  51.             self.color="blue"
  52.             self.matrix[1][1]=True
  53.             self.matrix[2][0]=True
  54.             self.matrix[2][1]=True
  55.             self.matrix[2][2]=True
  56. etc...


 
 
dont je crée 3 instances dans une fonction appelée seulement a l'initialisation d'une partie  
 

Code :
  1. previousP=Piece()
  2. currentP=Piece()
  3. currentP.makesamepiece(previousP)
  4. nextP=Piece()
  5. nextP.constructpiece()
  6. currentP.constructpiece()


 
previousP me sert en gros pour effacer la piece du canvas tel qu'elle etait avant le dernier mouvement  
currentP est la piece actuellement affichée
nextP est la piece a venir (visible dans un autre canvas a coté)
 
 
 
previousP est modifiée a chaque mouvement (ou rotation de la piece):
 

Code :
  1. previousP.currentposition=currentP.currentposition
  2. for i in range(0,4):
  3.     for j in range(0,4):
  4.         previousP.matrix[i][j]=currentP.matrix[i][j]


 
 
enfin quand ma piece est "posée", je mets a jour les différentes valeurs de mes instances de pieces:
 

Code :
  1. currentP=nextP
  2. nextP=Piece()
  3. nextP.constructpiece()


 
 
bon a priori je ne crée pas de nouvelles instances. ce que g verifié avec des print previousP,currentP,nextP  réguliers et ou ca m'affiche toujours les 3 mêmes adresses mémoires


Message édité par cosi le 18-10-2006 à 00:53:03
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed