ERR:MEMOIRE dans un programme |
Auteur |
Message |
aleo
Invité
|
Posté le : Mer 19 Mai 2010, 22:19
|
|
|
J'ai fais un programme, en graph, pour un petit jeu de plate-forme.
J'utilise une boucle infinie while.
le probleme, c'est que plus on joue, plus le programme ralentie, jusqu'au moment fatal (après 115 bouclage) ou le ERR:MEMOIRE apparait.
Comment faire pour eviter cette erreur ?
info sur ce que contient la boucle :
-code touche pour le mouvement
-test avec le pxl-test pour le deplacement
Merci
Aleo
|
|
|
|
linkakro
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
|
Posté le : Mer 19 Mai 2010, 22:38
|
|
|
Peut-être que les goto/label ralentissent moins, on ne sais jamais, si while fait du récursif...
Quel genre de variables sont utilisées ? Et sont elles réutilisées au fur et à mesure ?
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store |
|
|
|
Sangohan38
Autorisation : Membre
Nb de messages : 3370
Inscrit le : Sam 31 Déc 2005, 19:48
|
Posté le : Jeu 20 Mai 2010, 19:30
|
|
|
Essaye de supprimer au maximum les If/Then/else de ton programme.
Idem pour les labels qu'il faudrais remplacer par des boucles.
Sinon, tu peut essayer d'utiliser des sous programmes.
Sangohan38
|
|
|
|
Google_AdSense
|
Publicité
|
|
|
|
|
aleo
Invité
|
Posté le : Jeu 20 Mai 2010, 21:39
|
|
|
C'est pareil avec le goto. Si mes souvenir sont bon, les etiquettes font15x bouclage avant de craché.
les commandes sont allégées un max.
je quitte la boucle de déplacement pour les sauts (jeu de plateforme) et la pesanteur.
Reel appercus de la boucle :
j'éteinds le pxl jouer
code touche
dépacement :(if k=... et A!=1 et A!=51 et pxl-test-(...)!=1:x+1-> fois 3 pour le depacement droite gauche + dessente accelerer[!= : different]
La commande de saut :if k =...:goto...
je ralume le pxl
puis la pesanteur : goto...
end
voila en gros
plus la boucle "boucle" (-__-"), plus elle devient lente.
|
|
|
|
Google_AdSense
|
Publicité
|
|
|
|
|
linkakro
Autorisation : Membre
Nb de messages : 3767
Inscrit le : Lun 19 Oct 2009, 21:25
|
Posté le : Ven 21 Mai 2010, 19:11
|
|
|
Je crains que la longueur du If soit la principale cause.
Et comme a dit sangohan38, il est préférable d'utiliser des sous-programmes au lieu de goto extérieures. (par exemple ta gestion de la pesanteur)
---------------------- ti82statfr: 2008, inscrit: 2009, ti84pocketfr: noël2011, ti30xbmultiview: iut 2012-2014
Perfectionniste, manque tact. Pas le temps de tout publier depuis 2011. Répond toujours aux questions. (rédigé juin 2014)
Pour tout le monde et surtout les débutants, quelques-uns des articles courants :
*Traductions Algorithmie/Ti-Basic.
*Caractères spéciaux sur Tout82
Les défauts du TI-Basic : Goto_versus_algo et DelVar/End/Lbl/guillemet/store |
|
|
|
aleo
Invité
|
Posté le : Dim 23 Mai 2010, 17:32
|
|
|
J'ai supprimer la commande pour tomber plus vite. J'ai gagné un peu de temps avant le moment du crash.
J'utiliserai un sous programme, et vous dirai si sa marche
Merci !
|
|
|
|
Persalteas
Autorisation : Membre
Nb de messages : 2164
Inscrit le : Sam 23 Jan 2010, 20:09
|
Posté le : Mar 25 Mai 2010, 22:16
|
|
|
sur le mode d'emploi de la calculette, errMémoire dans un prog est signalé quand une boucle ne rencontre pas de fin.
par exemple, un if qui mettrait trop longtemps à rencontrer son End bloquerait.
c'est également valable si tu as:
Code |
LblA
patatipatata
While 0
patatipatata
If truc=machin:Goto A
patatapatati
End
|
Le while ne renconte pas le End dans le cas ou truc=machin.
c'est valable aussi quand tu remplace le Goto par l'éxécution d'un autre prog.
|
|
|
|
aleo
Invité
|
Posté le : Mer 26 Mai 2010, 17:04
|
|
|
Donc il faut que j'évite les boucles infini, et en faire deux pour le déplacement ?
C'est l'un des solutions qu'il faut que j'essaye.
J'ai remarqué aussi que plus je fait des programmes, plus moins la boucle "boucle".
Aleo
|
|
|
|
Sangohan38
Autorisation : Membre
Nb de messages : 3370
Inscrit le : Sam 31 Déc 2005, 19:48
|
Posté le : Jeu 27 Mai 2010, 19:36
|
|
|
Citer | plus moins la boucle "boucle". |
Euh, elle boucle plus où moins ta boucle?
Si c'est moins, c'est normal vu que tes progs prennent de la mémoire et que cette même mémoire est utilisée par tes programmes.
Pour essayer d'alléger, vu que tu utilise des pxl-test, met les dans des variables pour tes conditions.
Sangohan38
|
|
|
|
aleo
Invité
|
Posté le : Jeu 27 Mai 2010, 22:16
|
|
|
Je tien a m'excuser... Le "plus moin" était de trop.
Sangohan, je ne voie pas trop comment faire, vue que je suis tombé sur le pxl-test en bidouillant...
merci
|
|
|
|
Sangohan38
Autorisation : Membre
Nb de messages : 3370
Inscrit le : Sam 31 Déc 2005, 19:48
|
Posté le : Ven 28 Mai 2010, 22:49
|
|
|
Si tu utilise plusieur fois le même pxl-test, stock le dans une variable.
Exemple:
Code | If pxl-test(0,0)=1:1->A
If pxl-test(0,0)=0:2->A
devient:
pxl-test(0,0)->B
If B=1:1->A
If B=0:2->A |
En gros, tu remplace juste le pxl-test(0,0,) par une variable.
Sangohan38
|
|
|
|
aleo
Invité
|
Posté le : Dim 30 Mai 2010, 21:48
|
|
|
Sangohan, jai un autre solution, qui me fais gagner du bouclage.
Ma démarche :
Au lieu déteindre un pixel au début et de le rallumer a la fin de boucle, je me suis de faire tout en condition.
J'ai gagné ainssi beaucoup de "bouclage" ^^
|
|
|
|