Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.phpMé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

Optimisation (distance/globales)

 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 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: 18/03/12 14:10    Sujet du message: Optimisation (distance/globales) Citer

Salut, j'aimerais savoir lequel de ces deux codes est le meilleur pour calculer la distance entre deux points :
Jass:
function Distance takes real x1, real y1, real x2, real y2 returns real
    local real dx = x2-x1
    local real dy = y2-y1
    local real a = Atan(dy/dx)
    if dx == 0 then
        set a = bj_PI/2
    endif
    return dx/Cos(a)
endfunction


Jass:
function Distance takes real x1, real y1, real x2, real y2 returns real
    return SquareRoot((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))
endfunction


Sinon, j'avais une autre question : tout le monde préconise d'utiliser des variables globales pour les groupes/locations/etc parce que les créer coûte cher au pc. Mais est-ce que ça vaut aussi pour les réels, integers, boolean...?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
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: 18/03/12 15:24    Sujet du message: Citer

Je ne connaissais pas la première méthode, même si ça reste de la géométrie de base.
La réponse est évidente, la deuxième méthode car moins d'opérations.
En effet, il faut garder en tête que le jass est un langage interprété, il est fort probable que le temps d'interprétation de ces lignes de code est bien plus coûteux que l'opération en elle même.

De plus comme le résultat est forcément positif, parfois dans certains calculs, plutôt que d'utiliser la distance on peut utiliser son carré (on évite l'utilisation de SquareRoot).

Pour les variables, tout est une question de portée, il faut utiliser une variable globale quand on a besoin plusieurs fois au cours du temps (même si on peut toujours passer une variable locale en argument).
Je veux dire qu'il faut utiliser le type de variable le plus approprié à la situation.
Mais y'a un truc en savoir en jass, il y a un bug pour les variables locales.

http://www.wc3c.net/showthread.php?t=81872

Et oui pour les handle il vaut mieux éviter de les créer/détruire si c'est possible. Mais cela n'a rien à voir que cela soit une variable globale ou locale.
"real", "integer", "boolean" ne sont pas des sous type d'handle.
_________________
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: 18/03/12 15:48    Sujet du message: Citer

C'est sûr que la deuxième méthode fait moins de calculs, mais comme il y a une racine carrée, je me suis dit...
Mais, t'as raison, mieux vaut tout simplement laisser tomber la racine.

Ps : Pourquoi t'es messages stagnent à 6666, le forum a craqué sous le poids de tous tes postes Laughing ?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
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: 18/03/12 16:03    Sujet du message: Citer

J'ai oublié de préciser dans quel cas il est intéressant de recycler les handle.

- pour les group : avoir un seul groupe statique pour les énumérations d'unité que l'on a pas besoin de garder dans le temps (même pas besoin d'utiliser GroupClear, GroupEnum... supprime toutes les unités du group, avant d'éventuellement en rajouter).
Il vaut aussi mieux utiliser un filtre null, puis une loop avec FirstOfGroup/GroupRemoveUnit, car c'est plus efficace, mais ce coup ci ça vient du fait qu'à chaque évaluation d'un filtre non null, un nouveau thread est lancé.

- pour les timer : recycler les timer, plutôt que les créer/détruire, avec un système d'attachement de donnée au timer, comme TimerUtils.
Pour diverses raisons, dont rendre le système d'attachement efficace.

- utiliser une location voir plusieurs statiques, à utiliser avec MoveLocation si tu veux utiliser GetLocationZ, sinon chaque fonction qui utilise des loc à son équivalent avec des coordonnées.

- pour les dummy unit, parce que créer une unité est l'opération la plus couteuse qui soit.

J'en oublie surement mais ce sont les principales.

Pour le reste il est plus efficace de détruire/créer, toujours pour la même raison, le jass reste un langage interprété, un recyclage induirait plus de lignes de code que simplement utiliser create/destroy, et donc serait probablement moins efficace du fait du temps d'interprétation du code.
_________________
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 -> Aide sur les déclencheurs Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
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