Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.php?sid=fd42933ad9ee455537cd970162424602Médailles   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
  FAQFAQ World Editor   UploadUploader une map ou une image    UploadAjouter sa map à l'annuaire   UploadConsulter l'annuaire

Gestion des instances de struct
Aller à la page Précédente  1, 2, 3, 4, 5  Suivante
 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Tutoriels -> En validation
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 kungfu-sheep
Anomalie floodiforme


Inscrit le: 14 Avr 2011
Messages: 1843
Sujets: 119
Spécialité en worldedit: fonctions paramétriques, équation de mouvement.


MessagePosté le: 28/01/13 21:32    Sujet du message: Citer

et comme je récup l'instance pour réindexer dans destroy ?
_________________
22:27:43<Seiraw> Bah y a deux genre de personnes
22:27:57<Seiraw> les soumis et les soumises
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 28/01/13 21:36    Sujet du message: Citer

Je ne comprends pas pourquoi tu dis qu'il ne sert à rien.
Si tu détruis les instances seulement dans la méthode appelée périodiquement, là oui, il ne sert à rien car tu as déjà une variable locale qui a la bonne valeur.
Mais pour faire ça proprement, il faudrait laisser à l'utilisateur la possibilité de détruire l'instance avec la méthode destroy().
Et sans cette variable, c'est pas possible.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7142
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 28/01/13 21:45    Sujet du message: Citer

L'utilisateur à accés à l'array hein.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 28/01/13 21:47    Sujet du message: Citer

Hum?
L'array est private.
Par utilisateur j'entends le mec qui copie-colle la lib' dans sa map et l'utilise sans connaître son fonctionnement.
Et je ne vois pas ce que ça changerait. Il faudrait qu'il fasse une boucle pour récupérer l'index?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7142
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 28/01/13 21:55    Sujet du message: Citer

Cette library est juste un exemple, faut pas la "requires".
L'implémentation de la structure est assez simple pour être reproduite à chaque fois.
Donc oui l'utilisateur à accès à la variable array.

Le membre i de la struct est là pour dire d'être là, il n'a aucune utilité.

Je ne comprends vraiment pas votre délire avec ce membre :s
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 28/01/13 21:57    Sujet du message: Citer

J'ai vraiment du mal à te suivre. Peut-être qu'on ne parle pas de la même chose Wink.
Comment tu fais la méthode destroy sans ce membre?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7142
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 28/01/13 22:00    Sujet du message: Citer

Sapeur-Goblin a écrit:
J'ai vraiment du mal à te suivre. Peut-être qu'on ne parle pas de la même chose Wink.
Comment tu fais la méthode destroy sans ce membre?


En supprimant littéralement toute utilisation de ce membre, il est complètement superflu.
La method create et destroy n'en n'ont pas besoin pour gérer le tableau d'instances en cours, et de même pour loop sur le tableau.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 28/01/13 22:02    Sujet du message: Citer

Citation:
La method create et destroy n'en n'a pas besoin pour gérer le tableau d'instances en cours, et de même pour loop sur le tableau.

Mais quand tu détruis une instance, il faut bien la retirer du tableau, sinon tu "leaks" d'une instance.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7142
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 28/01/13 22:17    Sujet du message: Citer

Tu "leak" d'une instance seulement si tu ne la détruit pas quand tu n'en n'as plus besoin (.deallocate ou simplement .destroy si la method destroy est implicite).
Mais comme je l'ai dit c'est quand même plus propre de redéfinir le slot de l'array à 0.

Bref :

Jass:
library
     globals
     //quelques constant private

          //une variable de type de la struct en private array
          private Nom array Stack
          //une variable integer en private qui index les instances initialisé à 0
          private integer N = 0
          //un timer private
          private Timer T = CreateTimer()

     endglobals

     struct Nom

          // les composants de la struct

          method destroy takes nothing returns nothing

                call this.deallocate() // l'instance est bien détruite, donc recyclée
               
                set N = N - 1
                if N == 0 then
                    call PauseTimer(T)
                endif

                set Stack[this] = Stack[N]
                set Stack[N] = 0

          endmethod
         
          private static method nom2 takes nothing returns nothing

               //celle qui exécutera les instances une à une
               local integer i = N

               loop
               exitwhen i <= 0
               set i = i - 1
                    //les actions à exécuter pour chaque instance : Stack[i]
                    // on peut détruire Stack[i] sans problème
                    call Stack[i].destroy()
               endloop

          endmethod

          static method create takes /* ce que tu veux*/ returns thistype
                local thistype this = thistype.allocate()

                set Stack[N] = this
                set N = N + 1
               
                if N == 1 then
                    call TimerStart(T, 0.01, true, function thistype.nom2)
                endif
               
                return this
          endmethod
     endstruct
endlibrary


Notez qu'il peut y avoir des erreurs j'ai choisi des noms de variables plus appropriés, et j'ai surtout pas testé le code, écrit directement ici.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 28/01/13 22:22    Sujet du message: Citer

Jass:
set Stack[this] = Stack[N]
set Stack[N] = 0

Bah justement, c'est pour ce truc que le membre index est utile.
Parce que rien n'oblige this a être situé à l'index this du stack.
C'est vrai pour les premières instances, mais dès que tu fais ça :
Jass:
set Stack[this] = Stack

Ce n'est plus le cas.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7142
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 28/01/13 22:28    Sujet du message: Citer

En fait c'est la structure que tu ne comprends pas.

Code:
/call Tirlititi

_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 28/01/13 22:35    Sujet du message: Citer

TB just pwned Sapeur-Goblin!

Non, en fait, là, vraiment, je te suis plus.
En effet, j'aimerais bien l'avis de Tirlititi.
Je pense que j'ai bloqué sur un truc, mais en essayant ton algo, ça bloque.
Imaginons un cas simple.
Stack contient trois instances : thistype(1), 2, et 3.
Rangé en Stack[1] 2 et 3 pour faire simple (pas d'index 0).
Première fonction callback, tout se passe bien.
Ensuite, l'utilisateur fait thistype(2).destroy()
Ce qui donne, en suivant ton algo :
N = 2
Stack[1] = 1
Stack[2] = 3
Stack[3] = 0

Maintenant, on recrée une instance :
Stack[1] = 1
Stack[2] = 3
Stack[3] = 2
N = 3

On détruit la 3 :
N = 2
Et en suivant ton algo :
Stack[1] = 1
Stack[2] = 3
Stack[3] = 0

L'instance 2 a disparut du tableau alors qu'elle n'a pas été détruite.

Où j'ai buggé?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7142
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 28/01/13 22:40    Sujet du message: Citer

Citation:
Rangé en Stack[1] 2 et 3 pour faire simple (pas d'index 0).


Je me suis arrêté là, pas d'approximation, tient toi au code.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Sapeur-Goblin
Floodeur prématuré


Inscrit le: 14 Oct 2009
Messages: 719
Sujets: 40
Spécialité en worldedit: Les bugs
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 28/01/13 22:48    Sujet du message: Citer

Première création :
Stack[0] = 1
N = 1
Deuxième :
Stack[1] = 2
N = 2
Troisième :
Stack[2] = 3
N = 3

On détruit la 2 :
N = 2
Stack[this] = Stack[N] Donc Stack[2] = 3
Stack[2] = 0

C'est encore pire en suivant ton truc à la lettre : l'instance 2 est toujours dans Stack[1].

Ouais, en fait il suffit de faire thistype.create().destroy() et l'instance 1 sera toujours dans Stack.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7142
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 28/01/13 23:24    Sujet du message: Citer

Ah ouai il rime à rien mon code Surprised

J'ai pas vraiment la tête à cela pour l'instant mais oui faut garder une variable pour savoir où est stockée l'instance, mais dans ce cas là autant utiliser une liste doublement chainee circulaire plutôt.

Je serais plus constructif demain.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Tutoriels -> En validation Toutes les heures sont au format GMT + 1 Heure
Aller à la page Précédente  1, 2, 3, 4, 5  Suivante
Page 3 sur 5

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com