online faq recherche accueil
 

Il y a 139 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

Les fuites de mémoire, toujours elles !

 
n°4588624
Maximaxou
rejoignez les fidèles du JASS
Posté le 27-03-2007 à 19:46:04  profilanswer
 

   Bon je crois que je commence à comprendre comment ça marche. Si l'on crée un point, qu'on s'en sert une fois, qu'on en a plus besoin et qu'on ne le supprime pas, il reste en mémoire et il y a fuite de mémoire, ça tout le monde le sait. Quant aux variables, lorsqu'elle sont locales, elles sont supprimées dès la sortie de leur fonction. Si je comprends bien si l'on fait : local location point = Location(100,100) par exemple, à la sortie de la fonction, la variable point est supprimée, mais pas le point lui-même, il  y a donc fuite de mémoire. Une variable de type point serait donc un pointeur sur point et non un point. J'ai quelques questions :
1) Si l'on a une variable globale de type point, comment fait-on pour la supprimer si l'on en a plus besoin ? (je pense que l'on peut se poser les mêmes questions à propos des autres types) Attention je parle bien de la variable, non du point lui-même.
2) Est-ce que lorsque l'on fait en GUI 'position of (une_unité)', cela crée un point et l'on a nécessairement fuite de mémoire car le point est perdu ?
3) Est-ce que je me trompe lorsque je me dis que s'il existe une fonction pour supprimer un objet (RemoveLocation ou DestroyUnit par ex) c'est qu'en fait les variables du type correspondant sont des pointeurs ?


---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588635
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 27-03-2007 à 21:02:54  profilanswer
 

1) pour moi une globale ne peut être détruite une fois créé, on peut simplement changer sa référence, ou mettre une valeur nulle, warning globals !
 
2) Oui, enfin tu peux utiliser l'astuce du local point udg_..
 
3) D'aprés ce que j'ai compris toutes les variables ne sont en fait que des références (sauf boleen, entier, reel et peut être string mais c'est particulier)


Message édité par Troll-Brain le 27-03-2007 à 21:03:25

---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588645
Ayane
Posté le 28-03-2007 à 01:47:59  profilanswer
 

1/ On ne peut pas la désallouer, comme dans la plupart des langages d'ailleur la mémoire utilisée par les varaibles globales sera libérée une fois la partie terminée. Ce n'est pas une grande perte: 4 octets / variables.
2/ Toutes les fonctions retournants une location, la créer au préalable afin de la retourner. Donc tu fais 100 fois 'position of (une_unité)' et tu auras 100 locations créer.
3/ Tu ne te trompe pas, toutes les variables Jass sont codés sur 4 octets. Tout type qui est suceptible de faire plus de 4 octets (comme location: 2*4 octets) stoque donc pour valeur un pointeur vers les données. Pour les textes en fait c'est un pointeur mais il n'y a pas de fonction pour les supprimer.
 
Voilà tu as tout compris.


---------------
http://acathla.com
http://worldedit.free.fr/
n°4588647
Maximaxou
rejoignez les fidèles du JASS
Posté le 28-03-2007 à 01:57:37  profilanswer
 

Merci beaucoup. Dernière question : si dans une fonction on fait set un_point = position of(une_unité) et qu'à la fin on met :
call RemoveLocation(un_point), est-ce qu'il y a fuite de mémoire ?
C'est-à-dire est-ce que set un_point = position of (une_unite) crée un point avec l'appel de la fonction, puis en crée un autre pour la variable, ou bien comme je le pense, la variable un_point pointe tout simplement sur le point créé par la fonction, et il n'y a alors pas fuite de mémoire ?  


---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588648
Maximaxou
rejoignez les fidèles du JASS
Posté le 28-03-2007 à 02:01:29  profilanswer
 

Citation :

Pour les textes en fait c'est un pointeur mais il n'y a pas de fonction pour les supprimer.  


Donc si l'on fait local string une_chaine = "Bonjour", bien que ce soit une variable locale, on aura nécessairement une fuite de mémoire puisque lorsque 'une_chaine' est supprimée à la sortie de la fonction, c'est le pointeur qui est détruit mais non la chaîne elle-même ?


---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588657
Maximaxou
rejoignez les fidèles du JASS
Posté le 28-03-2007 à 03:38:02  profilanswer
 

Prenons un exemple concret pour voir si j'ai bien compris : (là c'est pour un chemin qui se déplace)

Code :
  1. init chemin
  2.     Evénements
  3.         Map initialization
  4.     Conditions
  5.     Actions
  6.         Set pos_chemin[1] = (Center of chemin 1 <gen> )
  7.         Set pos_chemin[2] = (Center of chemin 2 <gen> )
  8.         Set pos_chemin[3] = (Center of chemin 3 <gen> )
  9.         Set limite_bas = (Y of (Center of limite bas <gen> ))
  10.         Set une_position = (Center of limite haut <gen> )
  11.         Set limite_haut = (Y of (Center of limite haut <gen> ))
  12.         Set depart_chemin_bas = (Center of depart chemin bas <gen> )
  13.         Set depart_chemin_haut = (Center of depart chemin haut <gen> )
  14.         Set distance_carre = (Distance between pos_chemin[1] and pos_chemin[2])

Là il y a fuite de mémoire.

Code :
  1. init chemin
  2.     Evénements
  3.         Map initialization
  4.     Conditions
  5.     Actions
  6.         Set pos_chemin[1] = (Center of chemin 1 <gen> )
  7.         Set pos_chemin[2] = (Center of chemin 2 <gen> )
  8.         Set pos_chemin[3] = (Center of chemin 3 <gen> )
  9.         Set une_position = (Center of limite bas <gen> )
  10.         Set limite_bas = (Y of une_position)
  11.         -------- pour éviter la perte du point et une fuite de mémoire --------
  12.         Custom script:   call RemoveLocation(udg_une_position)
  13.         Set une_position = (Center of limite haut <gen> )
  14.         Set limite_haut = (Y of une_position)
  15.         -------- pour éviter la perte du point et une fuite de mémoire --------
  16.         Custom script:   call RemoveLocation(udg_une_position)
  17.         Set depart_chemin_bas = (Center of depart chemin bas <gen> )
  18.         Set depart_chemin_haut = (Center of depart chemin haut <gen> )
  19.         Set distance_carre = (Distance between pos_chemin[1] and pos_chemin[2])

Là non. C'est bien ça ?


Message édité par Maximaxou le 28-03-2007 à 03:39:51

---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588658
Ayane
Posté le 28-03-2007 à 09:28:15  profilanswer
 

A la fin tu dois aussi supprimé les locations pointées par:
depart_chemin_bas
depart_chemin_haut
 
A moins que tu ne t'en serve et les supprime dans un autre déclencheur.
Sinon c'est bien cela.


---------------
http://acathla.com
http://worldedit.free.fr/
n°4588666
Maximaxou
rejoignez les fidèles du JASS
Posté le 28-03-2007 à 16:26:34  profilanswer
 

Oui J'ai besoin de ces deux variables pour le trigger faisant se déplacer le chemin. Je crois que je n'ai oublié de supprimer aucun point :

Code :
  1. chemin
  2.     Evénements
  3.         Temps - Every 1.00 seconds of game time
  4.     Conditions
  5.     Actions
  6.         For each (Integer A) from 1 to 3, do (Actions)
  7.             Boucle - Actions
  8.                 Environnement - Change terrain type at pos_chemin[(Integer A)] to terrain_mort using variation 0 in an area of size 1 and shape Cercle
  9.         For each (Integer A) from 1 to 3, do (Actions)
  10.             Boucle - Actions
  11.                 If (All Conditions are True) then do (Then Actions) else do (Else Actions)
  12.                     Si - Conditions
  13.                         vers_le_bas[(Integer A)] Egal à TRUE
  14.                     Alors - Actions
  15.                         Set une_position = (pos_chemin[(Integer A)] offset by (0.00, (0.00 - distance_carre)))
  16.                         Custom script:   call RemoveLocation(udg_pos_chemin[ GetForLoopIndexA() ] )
  17.                         If (All Conditions are True) then do (Then Actions) else do (Else Actions)
  18.                             Si - Conditions
  19.                                 (Y of une_position) Inférieur à limite_bas
  20.                             Alors - Actions
  21.                                 Set pos_chemin[(Integer A)] = depart_chemin_haut
  22.                                 Set vers_le_bas[(Integer A)] = FALSE
  23.                             Sinon - Actions
  24.                                 Set pos_chemin[(Integer A)] = une_position
  25.                     Sinon - Actions
  26.                         Set une_position = (pos_chemin[(Integer A)] offset by (0.00, distance_carre))
  27.                         Custom script:   call RemoveLocation(udg_pos_chemin[ GetForLoopIndexA() ] )
  28.                         If (All Conditions are True) then do (Then Actions) else do (Else Actions)
  29.                             Si - Conditions
  30.                                 (Y of une_position) Supérieur à limite_haut
  31.                             Alors - Actions
  32.                                 Set pos_chemin[(Integer A)] = depart_chemin_bas
  33.                                 Set vers_le_bas[(Integer A)] = TRUE
  34.                             Sinon - Actions
  35.                                 Set pos_chemin[(Integer A)] = une_position
  36.                 Custom script:   call RemoveLocation(udg_une_position)
  37.                 Environnement - Change terrain type at pos_chemin[(Integer A)] to terrain_chemin using variation 0 in an area of size 1 and shape Cercle


En fait les points c'est traître puisque contrairement aux unités lorsque l'on fait un set <un_point> = xxx on on a plus besoin du point pointé précédemment (à moins qu'il soit pointé par une autre variable) donc avant chaque set <un_point>, il faut vérifier que le précédent point pointé est supprimé.


Message édité par Maximaxou le 28-03-2007 à 16:30:20

---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588667
Maximaxou
rejoignez les fidèles du JASS
Posté le 28-03-2007 à 16:28:39  profilanswer
 

Je n'avais mis aucun call RemoveLocation et testé ce trigger avec MemoryLeak mais cependant ça me mettait qu'il n'y avait aucune fuite de mémoire... pas l'air très fiable ce programme...


---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588668
Maximaxou
rejoignez les fidèles du JASS
Posté le 28-03-2007 à 16:34:05  profilanswer
 

Code :
  1. Tu ne te trompe pas, toutes les variables Jass sont codés sur 4 octets. Tout type qui est suceptible de faire plus de 4 octets (comme location: 2*4 octets) stoque donc pour valeur un pointeur vers les données. Pour les textes en fait c'est un pointeur mais il n'y a pas de fonction pour les supprimer.


Donc si j'ai bien compris, dans un déclencheur d'hélice de wisps par exemple où l'on fait 50 fois par seconde set udg_angle = udg_angle + 1, il n'y a aucune fuite de mémoire ?
 
Et à chaque changement de la custom_value d'une unité c'est pareil, changement de la valeur directement ?


Message édité par Maximaxou le 28-03-2007 à 16:39:44

---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588671
Maximaxou
rejoignez les fidèles du JASS
Posté le 28-03-2007 à 16:46:38  profilanswer
 

Sinon, j'aimerais savoir si la fonction SetUnitPosition qui prend en paramètres une unité et deux réels, crée un point et provoque donc une fuite de mémoire ?


Message édité par Maximaxou le 28-03-2007 à 16:47:02

---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588672
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 28-03-2007 à 16:48:45  profilanswer
 

returns nothing , donc a mon humble avis, non ca ne leak pas


---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588678
Maximaxou
rejoignez les fidèles du JASS
Posté le 28-03-2007 à 16:52:44  profilanswer
 

A mon avis si tu fais SetUnitPositionLoc(une_unite, Location(10,10)) ça te crée le point de coordonnées 10,10 avant tout et donc ça leak. Cependant avec SetUnitPosition, aucun point n'est pris en paramètre, donc je pense qu'il n'y a pas de leak.


---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588682
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 28-03-2007 à 17:03:19  profilanswer
 

SetUnitPositionLoc returns nothing non plus, par contre il est évident que si tu remove pas le point qui est en paramètre ca leakera (franglais), ca ne viendra pas de la fonction mais du point en lui même, sauf si tu continues à l'utiliser bien entendu


Message édité par Troll-Brain le 28-03-2007 à 17:03:49

---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588685
Maximaxou
rejoignez les fidèles du JASS
Posté le 28-03-2007 à 17:15:33  profilanswer
 

Tu ne pourras pas l'utiliser puisque qu'il est stocké nulle part.


---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588686
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 28-03-2007 à 17:19:48  profilanswer
 

Maximaxou a écrit :

Tu ne pourras pas l'utiliser puisque qu'il est stocké nulle part.


tu peux utiliser une variable en paramètre c'est bien sûr ce que je voulais dire ...
 


---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588688
Maximaxou
rejoignez les fidèles du JASS
Posté le 28-03-2007 à 17:36:45  profilanswer
 

Ouais mais on n'avance po là. Est-ce que SetUnitPosition crée un point ou pas, c'est ça la question GRR.


---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588691
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 28-03-2007 à 17:48:13  profilanswer
 

Moi je dis nan il returns nothing de toute facon tu peux tester sur une boucle pour voir si ca leak ou pas


---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588692
Maximaxou
rejoignez les fidèles du JASS
Posté le 28-03-2007 à 18:00:31  profilanswer
 

Sinon pour mon chemin ça marche pas si je remove les points :(
Quand j'enlève les custom scripts lignes 16, 27 et 36, ça marche bien. Je ne comprends pas pourquoi :(


---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588695
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 28-03-2007 à 18:24:11  profilanswer
 

il me semble que les variables sont passées par référence et non par valeur ( sauf pour entier,réel,boleen et peut être string), donc si tu détruis udg_pos_chemin[ GetForLoopIndexA() ], tu détruis aussi udg_une_position


Message édité par Troll-Brain le 28-03-2007 à 18:24:52

---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588697
Maximaxou
rejoignez les fidèles du JASS
Posté le 28-03-2007 à 18:44:38  profilanswer
 

Je me doute que je détruits certainement des point qu'il faut pas quelque part mais je ne comprends pas pourquoi.
Set une_position = (pos_chemin[(Integer A)] offset by (0.00, (0.00 - distance_carre)))
                        Custom script:   call RemoveLocation(udg_pos_chemin[ GetForLoopIndexA() ] )
une_position et pos_chemin[A] pointent vers des points différents donc je ne vois pas pourquoi le custom script supprimerait une_position également.
 
Tien que se passe-t-il s'il on fait par exemple :
set point1 = point2
Est-ce que un point est créé et point1 pointe vers un point différent de point2 malgré que ces deux points ont les mêmes coordonnées, ou est-ce que point1 pointe vers le même point que point2 et si l'on fait 'call RemoveLocation(point1)' on supprime l'unique point, et donc point1 et point2 prennent ts deux la valeur nulle ? Je ne sais pas si je suis très clair :s.


Message édité par Maximaxou le 28-03-2007 à 18:45:54

---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588698
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 28-03-2007 à 18:45:57  profilanswer
 

J'ai essayé et le point 2 pointe bien sur le point 1, ce n'est qu'un seul et unique point


---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588699
Maximaxou
rejoignez les fidèles du JASS
Posté le 28-03-2007 à 18:53:43  profilanswer
 

C'est très bizarre... avec ce trigger :

Code :
  1. chemin
  2.     Evénements
  3.         Temps - Every 1.00 seconds of game time
  4.     Conditions
  5.     Actions
  6.         For each (Integer A) from 1 to 3, do (Actions)
  7.             Boucle - Actions
  8.                 Environnement - Change terrain type at pos_chemin[(Integer A)] to terrain_mort using variation 0 in an area of size 1 and shape Cercle
  9.         For each (Integer A) from 1 to 3, do (Actions)
  10.             Boucle - Actions
  11.                 If (All Conditions are True) then do (Then Actions) else do (Else Actions)
  12.                     Si - Conditions
  13.                         vers_le_bas[(Integer A)] Egal à TRUE
  14.                     Alors - Actions
  15.                         Set une_position = (pos_chemin[(Integer A)] offset by (0.00, (0.00 - distance_carre)))
  16.                         If (All Conditions are True) then do (Then Actions) else do (Else Actions)
  17.                             Si - Conditions
  18.                                 (Y of une_position) Inférieur à limite_bas
  19.                             Alors - Actions
  20.                                 Set pos_chemin[(Integer A)] = depart_chemin_haut
  21.                                 Set vers_le_bas[(Integer A)] = FALSE
  22.                             Sinon - Actions
  23.                                 Set pos_chemin[(Integer A)] = une_position
  24.                     Sinon - Actions
  25.                         Set une_position = (pos_chemin[(Integer A)] offset by (0.00, distance_carre))
  26.                         If (All Conditions are True) then do (Then Actions) else do (Else Actions)
  27.                             Si - Conditions
  28.                                 (Y of une_position) Supérieur à limite_haut
  29.                             Alors - Actions
  30.                                 Set pos_chemin[(Integer A)] = depart_chemin_bas
  31.                                 Set vers_le_bas[(Integer A)] = TRUE
  32.                             Sinon - Actions
  33.                                 Set pos_chemin[(Integer A)] = une_position
  34.                 Environnement - Change terrain type at pos_chemin[(Integer A)] to terrain_chemin using variation 0 in an area of size 1 and shape Cercle
  35.                 Custom script:   call RemoveLocation(udg_une_position)


Le chemin est créé mais ne bouge pas. Je pense donc qu'arrivé à 'call RemoveLocation(udg_une_position)', le déclo s'arrête. Je pense que l'explication est la suivante : le point pointé par udg_une_position est supprimé, mais la variable également... si c'est le cas il faut absolument passer par une variable locale... le problème serait alors de supprimer les points créés par pos_chemin[i], puisque ces trois variables doivent absolument rester globales :/.


---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588700
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 28-03-2007 à 18:59:03  profilanswer
 

http://worldedit.free.fr/forum/viewtopic.php?t=1711
 
Affiche des textes message pour savoir la valeur de integer A au début de la boucle, moi je ne penses pas qu'elle s'arrête.
 
EDIT : tes 2 boucles integer a ne sont pas imbriquées l'une dans l'autre, je penses que non mais c'est difficile à voir en balise code ..


Message édité par Troll-Brain le 28-03-2007 à 19:05:40

---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588701
Maximaxou
rejoignez les fidèles du JASS
Posté le 28-03-2007 à 19:04:34  profilanswer
 

La boucle ne s'arrête pas mais si la variable une_position est supprimé c'est comme si elle s'arrêtait.
 
Sinon j'ai vérifié ce que tu m'as dit :

Code :
  1. test
  2.     Evénements
  3.         Map initialization
  4.     Conditions
  5.     Actions
  6.         Custom script:   set udg_une_position = Location (100, 100)
  7.         Set une_position2 = une_position
  8.         Custom script:   call RemoveLocation(udg_une_position)
Code :
  1. test2
  2.     Evénements
  3.         Temps - Elapsed game time is 0.00 seconds
  4.     Conditions
  5.     Actions
  6.         Custom script:   call DisplayTextToForce( GetPlayersAll(), "une_position = ( " + R2S(GetLocationX(udg_une_position)) + " , " + R2S(GetLocationY(udg_une_position)) + " )" )
  7.         Custom script:   call DisplayTextToForce( GetPlayersAll(), "une_position2 = ( " + R2S(GetLocationX(udg_une_position2)) + " , " + R2S(GetLocationY(udg_une_position2)) + " )" )


ça affiche :
une_position = ( 0.00 , 0.00 )
une_position2 = ( 0.00 , 0.00 )
Tu avais donc raison.


---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588702
Maximaxou
rejoignez les fidèles du JASS
Posté le 28-03-2007 à 19:07:33  profilanswer
 

Maintenant autre test :

Code :
  1. test
  2.     Evénements
  3.         Map initialization
  4.     Conditions
  5.     Actions
  6.         Custom script:   set udg_une_position = Location (100, 100)
  7.         Set une_position2 = (une_position offset by (10.00, 10.00))
  8.         Custom script:   call RemoveLocation(udg_une_position)
Code :
  1. test2
  2.     Evénements
  3.         Temps - Elapsed game time is 0.00 seconds
  4.     Conditions
  5.     Actions
  6.         Custom script:   call DisplayTextToForce( GetPlayersAll(), "une_position = ( " + R2S(GetLocationX(udg_une_position)) + " , " + R2S(GetLocationY(udg_une_position)) + " )" )
  7.         Custom script:   call DisplayTextToForce( GetPlayersAll(), "une_position2 = ( " + R2S(GetLocationX(udg_une_position2)) + " , " + R2S(GetLocationY(udg_une_position2)) + " )" )


ça affiche :
une_position = ( 0.00 , 0.00 )  
une_position2 = ( 110.00 , 110.00 )  
J'avais donc raison aussi.
Il n'y a donc aucune raison pour que une_position soit supprimée ici :

Code :
  1. Set une_position = (pos_chemin[(Integer A)] offset by (0.00, (0.00 - distance_carre)))
  2.                         Custom script:   call RemoveLocation(udg_pos_chemin[ GetForLoopIndexA() ] )



---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588703
Maximaxou
rejoignez les fidèles du JASS
Posté le 28-03-2007 à 19:09:47  profilanswer
 

Code :
  1. Set pos_chemin[(Integer A)] = une_position
  2.                 Custom script:   call RemoveLocation(udg_une_position)


Par contre là, les deux points sont en effet supprimés.
 

Citation :

tes 2 boucles integer a ne sont pas imbriquées l'une dans l'autre, je penses que non mais c'est difficile à voir en balise code ..

Elles ne sont pas imbriquées en effet... euh, et alors ?


Message édité par Maximaxou le 28-03-2007 à 19:12:02

---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588704
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 28-03-2007 à 19:12:44  profilanswer
 

Non ta fonction offset créé un autre point indépendant du point ayant servi comme référence, il vie sa vie même aprés la mort de son maître :
 

Code :
  1. function OffsetLocation takes location loc, real dx, real dy returns location
  2.     return Location(GetLocationX(loc) + dx, GetLocationY(loc) + dy)
  3. endfunction


---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588705
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 28-03-2007 à 19:13:47  profilanswer
 

Citation :

tes 2 boucles integer a ne sont pas imbriquées l'une dans l'autre, je penses que non mais c'est difficile à voir en balise code ..


 

Citation :

Elles ne sont pas imbriquées en effet... euh, et alors ?


 
Nan c'est juste que si c'était l'inverse ca aurait posé problème


Message édité par Troll-Brain le 28-03-2007 à 19:14:25

---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588706
Maximaxou
rejoignez les fidèles du JASS
Posté le 28-03-2007 à 19:17:39  profilanswer
 

Voila, problème résolu :

Code :
  1. chemin
  2.     Evénements
  3.         Temps - Every 1.00 seconds of game time
  4.     Conditions
  5.     Actions
  6.         For each (Integer A) from 1 to 3, do (Actions)
  7.             Boucle - Actions
  8.                 Environnement - Change terrain type at pos_chemin[(Integer A)] to terrain_mort using variation 0 in an area of size 1 and shape Cercle
  9.         For each (Integer A) from 1 to 3, do (Actions)
  10.             Boucle - Actions
  11.                 If (All Conditions are True) then do (Then Actions) else do (Else Actions)
  12.                     Si - Conditions
  13.                         vers_le_bas[(Integer A)] Egal à TRUE
  14.                     Alors - Actions
  15.                         Set une_position = (pos_chemin[(Integer A)] offset by (0.00, (0.00 - distance_carre)))
  16.                         Custom script:   call RemoveLocation(udg_pos_chemin[ GetForLoopIndexA() ] )
  17.                         If (All Conditions are True) then do (Then Actions) else do (Else Actions)
  18.                             Si - Conditions
  19.                                 (Y of une_position) Inférieur à limite_bas
  20.                             Alors - Actions
  21.                                 Set pos_chemin[(Integer A)] = (depart_chemin_haut offset by (0.00, 0.00))
  22.                                 Set vers_le_bas[(Integer A)] = FALSE
  23.                             Sinon - Actions
  24.                                 Set pos_chemin[(Integer A)] = (une_position offset by (0.00, 0.00))
  25.                     Sinon - Actions
  26.                         Set une_position = (pos_chemin[(Integer A)] offset by (0.00, distance_carre))
  27.                         Custom script:   call RemoveLocation(udg_pos_chemin[ GetForLoopIndexA() ] )
  28.                         If (All Conditions are True) then do (Then Actions) else do (Else Actions)
  29.                             Si - Conditions
  30.                                 (Y of une_position) Supérieur à limite_haut
  31.                             Alors - Actions
  32.                                 Set pos_chemin[(Integer A)] = (depart_chemin_bas offset by (0.00, 0.00))
  33.                                 Set vers_le_bas[(Integer A)] = TRUE
  34.                             Sinon - Actions
  35.                                 Set pos_chemin[(Integer A)] = (une_position offset by (0.00, 0.00))
  36.                 Environnement - Change terrain type at pos_chemin[(Integer A)] to terrain_chemin using variation 0 in an area of size 1 and shape Cercle
  37.                 Custom script:   call RemoveLocation(udg_une_position)


Qui aurait pu penser que 'Set pos_chemin[(Integer A)] = une_position' était différent de 'Set pos_chemin[(Integer A)] = (une_position offset by (0.00, 0.00))' :o
 

Citation :

Nan c'est juste que si c'était l'inverse ca aurait posé problème


Très juste.


Message édité par Maximaxou le 28-03-2007 à 19:18:53

---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588707
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 28-03-2007 à 19:18:20  profilanswer
 

euh tout le monde en regardant les librairies xD
y'a pas de leak ?


Message édité par Troll-Brain le 28-03-2007 à 19:19:04

---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 
n°4588712
Maximaxou
rejoignez les fidèles du JASS
Posté le 28-03-2007 à 22:59:11  profilanswer
 

Ya moins de leak c sûr, mais yen a tjs, ché pa pkoi.


---------------
Dota c'est bien, le slide c'est encore mieux !
n°4588894
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 04-04-2007 à 18:35:40  profilanswer
 

Si tu pouvais poster ton code en gui sur le forum worldedit avec les balise gui ca serait plus joli et lisible :)


---------------
Je ne prends que sur rendez vous.
Assurez vous d'avoir un moyen de paiement conséquent, et de préférence en liquide, avant de me quémander la moindre question.
 

Aller à :
Ajouter une réponse