Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 17/02/12 22:34 Sujet du message: |
|
|
Euh non, de l'intérêt du if en lui même.
Pour le mouvement "non linéaire" c'est probablement du à la collision des unités, cela ne devrait pas de produire si les unités qui patrouillent ont 'Aloc' (infestation). _________________
|
|
Revenir en haut |
|
|
Wareditor The Master of Nothing
Inscrit le: 22 Déc 2008 Messages: 1638 Sujets: 88 Spécialité en worldedit: Effacer
|
Posté le: 17/02/12 22:39 Sujet du message: |
|
|
Le if sert a stopper la correction de la trajectoire au cas ou l’unité arrête de patrouiller.
Même avec infestation ils buggent. _________________
Dernière édition par Wareditor le 17/02/12 22:58; édité 1 fois |
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 17/02/12 22:54 Sujet du message: |
|
|
Hmm, mouai. (pour le if)
Je pense que ce genre de cas devrait être géré par l'utilisateur lui même via la method destroy, plutôt qu'à chaque "refresh".
Bon allez je vais arrêter de te torturer, je re-transfère le sujet.
Maintenant que le code est fonctionnel, le temps est venu pour les optimisations.
Mouaaaaaaahahahaha _________________
|
|
Revenir en haut |
|
|
Wareditor The Master of Nothing
Inscrit le: 22 Déc 2008 Messages: 1638 Sujets: 88 Spécialité en worldedit: Effacer
|
Posté le: 17/02/12 23:03 Sujet du message: |
|
|
Merci !
Je pense que c'est déjà assez optimiser ? ou encore une fois je me trompe ?
Après j'ai ajouter une fonction pour pouvoir utiliser la liste avec des fonctions publics :
Jass: | function LP_returnLL takes nothing returns UnitLL
return LL
endfunction |
Il y a un autre moyen plus clean ? _________________
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 17/02/12 23:27 Sujet du message: |
|
|
La question est pourquoi tu voudrais utiliser la liste en dehors de cette bibliothèque ?
De toute façon si tu en as vraiment besoin, autant supprimer l'attribut "private" de la variable et lui donner un meilleur nom, tel que PatrolLL, ou quelque chose du genre.
Pour les optimisations :
Déjà, je supprimerais le if que j'ai mentionné.
Ensuite plutôt que systématiquement déplacer l'unité il serait peut être judicieux de vérifier sa position (GetUnitX/Y) auparavant, et la déplacer seulement si c'est nécessaire.
Plutôt qu'une simple comparaison d'égalité, il faudrait utiliser une valeur EPSILON constante.
Par ex comparaison entre 2 rééls avec une valeur EPSILON :
Plutôt que :
Jass: | if (r1 - r2 > EPSILON) or (r2 - r1 > EPSILON) then |
La raison de ce or, vient du fait que r1 n'est pas forcément plus grand que r2, cela peut être l'inverse.
De plus dans le cas d'un trop grand décalage détecté, on a une chance sur 2 que r1 soit supérieur à r2, et si la première condition est vérifiée, la deuxième ne sera pas évaluée.
Cela dit si tu sais avec certitude quel réel est plus grand que l'autre il est évident qu'une seule condition suffit.
Quand à l'EPSILON par lui même c'est pour que la condition soit plus souvent vraie, en effet il est très rare qu'un réel est strictement égal à un autre.
De plus on peut parfaitement autoriser un décalage max imperceptible de l'ordre de quelques pixels (façon de parler).
Je pars de l'hypothèse que SetUnitX/Y ne devrait pas être appliqué systématiquement, et que le surcoût de ce if avec GetUnitX/Y devrait être largement compensé par ces économies d'appels de fonctions SetUnitX/Y.
Hypothèse fort raisonnable je pense.
Maintenant c'est à toi de tester.
Garde une copie de ce code en l'état actuel, et modifie cette copie avec mes suggestions.
Ensuite il te reste à faire un benchmark.
Pour cela il faut que tu testes les 2 codes un à la fois.
J'ai un peu la flemme d'expliquer comment pour l'instant :p _________________
|
|
Revenir en haut |
|
|
Wareditor The Master of Nothing
Inscrit le: 22 Déc 2008 Messages: 1638 Sujets: 88 Spécialité en worldedit: Effacer
|
Posté le: 18/02/12 10:18 Sujet du message: |
|
|
Ok c'est fait !
Cela ressemble a ça:
Jass: |
set X = this.a*this.time+this.Xbase
set Y = this.b*this.time+this.Ybase
set Xu = GetUnitX(this.whichUnit)
set Yu = GetUnitY(this.whichUnit)
if ((X - Xu > EPSILON) or (Xu - X > EPSILON )) and ((Y - Yu > EPSILON) or (Yu - Y > EPSILON )) then
//SetUnitXY
call SetUnitX(this.whichUnit, X )
call SetUnitY(this.whichUnit, Y )
endif
|
Dès que l'unit dévie trop, le set se déclenche. Donc si le patrol est normal pas besoin de set X/Y. C'est pour moi la meilleure technique car elle corrige uniquement quand il y a un problème.
Je veux rendre public la List pour pouvoir Remove les units à l'intérieur et les remove du jeu correctement. _________________
|
|
Revenir en haut |
|
|
kungfu-sheep Anomalie floodiforme
Inscrit le: 14 Avr 2011 Messages: 1846 Sujets: 119 Spécialité en worldedit: fonctions paramétriques, équation de mouvement.
|
Posté le: 18/02/12 11:55 Sujet du message: |
|
|
félicitation ware, ça a été long mais tu as réussi à franchir le cap troll ^^
merci pour ton travail. _________________
22:27:43<Seiraw> Bah y a deux genre de personnes
22:27:57<Seiraw> les soumis et les soumises |
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 18/02/12 13:50 Sujet du message: |
|
|
J'aurais plutôt utiliser 3 "or".
Je ne pense pas que cela soit possible, mais imagine que l'unité dérive de plus de X fois la valeur d'epsilon en X mais pas en Y, ou inversement.
Du coup t'as aussi besoin de moins de parenthèses (insignifiant certes).
Ah et avis purement subjectif, mais je réserves la première lettre majuscule pour les variables globales, pas pour les locales.
Je connais très peu de personnes qui utilisent aussi cette convention, sous prétexte que c'est aussi utilisé pour les fonctions, mais bon perso rien qu'au nom que je donne je vois tout de suite si c'est une fonction ou une variable globale.
Le principal est que tu choisisses une convention typographique pour différencier les variables globales des variables locales/paramètre de function.
Tu peux par ex choisir le préfixe "g_".
Car oui en jass il est possible d'avoir une variable locale et globale du même nom, tu n'auras pas d'erreur de compilation à la sauvegarde.
Plus d'infos ici
Citation: | Je veux rendre public la List pour pourvoir Remove les units dedans et les remove du jeu correctement. |
Je viens de mettre à jour UnitLL.
Tu n'as pas besoin de rendre publique la list. _________________
Dernière édition par Troll-Brain le 18/02/12 19:04; édité 1 fois |
|
Revenir en haut |
|
|
Wareditor The Master of Nothing
Inscrit le: 22 Déc 2008 Messages: 1638 Sujets: 88 Spécialité en worldedit: Effacer
|
Posté le: 18/02/12 17:04 Sujet du message: |
|
|
Code mis a jour
Par contre cela fait 5 jours que je cherche un bug qui apparait sur ma map : a chaque fois que j'ajoute une unit a une LL elle prend la place de celle qui a été ajouter avant donc au final il y a une unit dans la LL.
Le systeme marche parfaitement sur ma demo alors cela vient de ma map mais le truc c'est que je ne vois pas d’où et pourquoi...
Je met la map si un personne voudrait m'aider.
Télécharger la map
Il faut le nouveau jasshelper.
Pour voir le bug il vous suffit de lancer la map et de passer au niveau 1 et la les messages indiqueront le nombre d'unit dans la LL. _________________
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 18/02/12 18:49 Sujet du message: |
|
|
Je n'ai pas vraiment envie d'y réfléchir, mais juste pour savoir, actuellement cela fonctionne dans n'importe quel sens ?
Si on considère le point A comme la base et B le point d'arrivée.
Ton indentation n'est pas correcte pour SetUnitX/Y.
Sinon, pour ton bug, as tu essayé de sauvegarder la map en mode debug ? (disponible dans le menu jasshelper du newgen worldeditor), puis évidemment de jouer "tester" la map.
Je me pencherais dessus quand je le pourrais, probablement ce soir. _________________
|
|
Revenir en haut |
|
|
Wareditor The Master of Nothing
Inscrit le: 22 Déc 2008 Messages: 1638 Sujets: 88 Spécialité en worldedit: Effacer
|
Posté le: 18/02/12 19:45 Sujet du message: |
|
|
Résolue !
Je n'avais pas la compétence UnitIndexer. Je croyais qu'elle se créait toute seul.
EDIT : Cela marche dans les deux sens.
J'ai modifier le code.
Normalement cela marche dans tout les cas même ceux des patrols hyper-irrationnel. _________________
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 19/02/12 21:29 Sujet du message: |
|
|
Pourquoi tu redonnes les ordres périodiquement ?
Et surtout pourquoi tu donnes l'ordre "move" au lieu de "patrol", à plus forte raison dans la method create.
Il était trop simple le code avant >< ? _________________
|
|
Revenir en haut |
|
|
Wareditor The Master of Nothing
Inscrit le: 22 Déc 2008 Messages: 1638 Sujets: 88 Spécialité en worldedit: Effacer
|
Posté le: 19/02/12 21:31 Sujet du message: |
|
|
Nan mais comme je dis dans les comment l'unit ayant le comportement que je nomme de hyper-irrationnel ne permet pas l'utilisation de patrol. Si tu veux voir ej peux te donner ma map sans cette modification. Et je peux te dire que c'est affreux. _________________
|
|
Revenir en haut |
|
|
Troll-Brain Ri1kamoua
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
|
Posté le: 19/02/12 21:36 Sujet du message: |
|
|
Donne, je suis comme Saint Thomas. (il me faut aussi ton "ancienne" version du code) _________________
|
|
Revenir en haut |
|
|
Wareditor The Master of Nothing
Inscrit le: 22 Déc 2008 Messages: 1638 Sujets: 88 Spécialité en worldedit: Effacer
|
Posté le: 19/02/12 21:49 Sujet du message: |
|
|
Télécharger la map
La map comporte la vielle et la nouvelle version.
Pour voir le bug tu peux lancer la map et aller au niveau 1 ( l'objet ). Après il suffit de regarder le comportement des patrols "noirs" ( les monstres noirs ). ( enfin la l'effet est réduit a cause du Linear patrol mais on remarque qu'il est bizarre, avec la patrol normal il est très visible )
Si tu veux voir avec un patrol normal il te suffit de modifier une ligne dans Maze Utils dans la fonction CreateUnitForPatrol. Change la ligne qui lance la patrol par Linear Patrol par une patrol normal. _________________
|
|
Revenir en haut |
|
|
|