Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
Rhadamante Petit flooder
Inscrit le: 28 Aoû 2007 Messages: 1457 Sujets: 24 Spécialité en worldedit: Bêêh hé hé hé ! Médailles: 3 (En savoir plus...)
|
Posté le: 17/06/08 23:18 Sujet du message: |
|
|
[Master] a écrit: | Pour le reste ta solution est fiable comme elle est. Si tu veux pousser plus il faudrait ne pas détruire le déclencheur et surtout ne pas le créer s'il existe déjà. Tu peux utiliser un gamecache pour te rappeler de quel déclencheur a déjà été créé. |
Est-ce que garder un déclencheur pour chaque unité ça risque pas de faire beaucoup si je place beaucoup d'unité, surtout si je dois stocker ça dans un game cache ? Est-ce que j'y gagnerais vraiment en vitesse d'exécution, en ressources utilisées, etc. ? _________________
|
|
Revenir en haut |
|
|
Magus Membre a fort taux de post
Inscrit le: 13 Oct 2007 Messages: 994 Sujets: 25 Spécialité en worldedit: Codeur
|
Posté le: 17/06/08 23:21 Sujet du message: |
|
|
Imagine une unité se fait frapper 100 fois par seconde, tu vas créer 100 fois le même déclencheur puis le détruire. Le mieux est donc de ne le créer qu'une seule fois. Un simple test, même via un gamecache est plus court qu'une création de déclencheur. _________________
- La théorie c'est quand rien ne fonctionne mais tout le monde sait pourquoi.
- La pratique c'est quand tout fonctionne mais personne ne sait pourquoi.
- Chez moi la théorie et la pratique sont réunies, rien ne fonctionne et personne ne sait pourquoi. |
|
Revenir en haut |
|
|
Rhadamante Petit flooder
Inscrit le: 28 Aoû 2007 Messages: 1457 Sujets: 24 Spécialité en worldedit: Bêêh hé hé hé ! Médailles: 3 (En savoir plus...)
|
Posté le: 17/06/08 23:31 Sujet du message: |
|
|
Bon, dans ce cas, si ça ne te dérange pas, j'aimerais bien que tu me montres comment faire, notamment comment reconnaitre un déclencheur déjà crée.
Merci pour tes réponse passées et, j'espère, à venir. _________________
|
|
Revenir en haut |
|
|
Magus Membre a fort taux de post
Inscrit le: 13 Oct 2007 Messages: 994 Sujets: 25 Spécialité en worldedit: Codeur
|
Posté le: 17/06/08 23:36 Sujet du message: |
|
|
Je n'ai pas worldedit car je suis chez mes parents. Je rentre chez moi demain. _________________
- La théorie c'est quand rien ne fonctionne mais tout le monde sait pourquoi.
- La pratique c'est quand tout fonctionne mais personne ne sait pourquoi.
- Chez moi la théorie et la pratique sont réunies, rien ne fonctionne et personne ne sait pourquoi. |
|
Revenir en haut |
|
|
Rhadamante Petit flooder
Inscrit le: 28 Aoû 2007 Messages: 1457 Sujets: 24 Spécialité en worldedit: Bêêh hé hé hé ! Médailles: 3 (En savoir plus...)
|
Posté le: 17/06/08 23:41 Sujet du message: |
|
|
Pas de problème, en même temps vu l'heure, je ne m'attendais pas à une réponse immédiate. Ça me laissera le temps d'y réfléchir un peu de mon côté. _________________
|
|
Revenir en haut |
|
|
Darkfeyt Floodeur prématuré
Inscrit le: 22 Nov 2007 Messages: 677 Sujets: 27 Spécialité en worldedit: Jamais sortir ses projets ?
|
Posté le: 18/06/08 01:33 Sujet du message: |
|
|
Je pense qu'avec cela tu devrai t'en sortir.Tu peut (et même je te le conseil) d'implanté la fonction a l'intérieur de ta fonction d'une façon plus optimisé.
(Dans cette État là , la fonction renverra true si l'unité a déjà était appelé avec cette unité en argument , dans le cas contraire elle renverra false)
Mais je pense que le plus simple serai qu'au lieu d'écrire une booléene inutile dans le gamecache il vaudrait mieux écrire l'handle du trigger.
Jass: |
function I2T takes integer i returns trigger
return i
return null
endfunction
//Pour la recuperer
set Trigger = I2T(GetStoredInteger(...))
//Pour l'enregistrer
call StoreInteger(...,H2I(Trigger))
//Pour vérifier la présence
call HaveStoredInteger(...)
|
Ce n'est pas très claire comme explication , mais je pense que tu as comme même compris se qu'il faut faire. _________________
|
|
Revenir en haut |
|
|
Magus Membre a fort taux de post
Inscrit le: 13 Oct 2007 Messages: 994 Sujets: 25 Spécialité en worldedit: Codeur
|
Posté le: 18/06/08 10:49 Sujet du message: |
|
|
Et petite remarque si tu comptes optimiser a fond. Tu peux détruire le déclencheur qui va avec lorsqu'une unité meurt. _________________
- La théorie c'est quand rien ne fonctionne mais tout le monde sait pourquoi.
- La pratique c'est quand tout fonctionne mais personne ne sait pourquoi.
- Chez moi la théorie et la pratique sont réunies, rien ne fonctionne et personne ne sait pourquoi. |
|
Revenir en haut |
|
|
Rhadamante Petit flooder
Inscrit le: 28 Aoû 2007 Messages: 1457 Sujets: 24 Spécialité en worldedit: Bêêh hé hé hé ! Médailles: 3 (En savoir plus...)
|
Posté le: 18/06/08 13:50 Sujet du message: |
|
|
Bon voilà j'ai essayé un truc, mais c'est probablement du grand n'importe quoi (d'où le nom "truc") :
Jass: | function Trig_degatbis_Actions takes nothing returns nothing
call DisplayTextToPlayer(Player(0), 0, 0, "Text Tag - " + R2S(GetEventDamage())) // débug
call TextTagDamage(GetEventDamage(), GetTriggerUnit(), 50.0, 96.0, GetRandomReal(75.0, 105.0), 10, 0, 0.75, "critique") // affiche les dégats
endfunction
//===========================================================================
function Trig_degat_Actions takes nothing returns nothing
local unit target = GetTriggerUnit()
local trigger trg_degatbis = null
if HaveStoredInteger(udg_GC, "degat", I2S(H2I(target)) ) == true then
set trg_degatbis = I2T(GetStoredInteger(udg_GC, "degat", I2S(H2I(target)) ))
call DisplayTextToPlayer(Player(0), 0, 0, "trigger récupéré") // débug
else
set trg_degatbis = CreateTrigger()
call TriggerRegisterUnitEvent( trg_degatbis, target, EVENT_UNIT_DAMAGED )
call TriggerAddAction( trg_degatbis, function Trig_degatbis_Actions )
call StoreInteger(udg_GC, "degat", I2S(H2I(target)), H2I(trg_degatbis))
call DisplayTextToPlayer(Player(0), 0, 0, "trigger créé et stocké") // débug
endif
set trg_degatbis = null
set target = null
endfunction
//===========================================================================
function InitTrig_degat takes nothing returns nothing
set gg_trg_degat = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_degat, EVENT_PLAYER_UNIT_ATTACKED )
call TriggerAddAction( gg_trg_degat, function Trig_degat_Actions )
endfunction |
Dans la pratique, la première fois que je tape une unité, ça affiche "trigger créé et stocké", et les fois suivantes, "trigger récupéré". Dans tout les cas, les dégâts s'affichent comme prévu. _________________
|
|
Revenir en haut |
|
|
Magus Membre a fort taux de post
Inscrit le: 13 Oct 2007 Messages: 994 Sujets: 25 Spécialité en worldedit: Codeur
|
Posté le: 18/06/08 14:37 Sujet du message: |
|
|
Globalement, c'est bon.
Juste quelques remarques pour t'améliorer :
Jass: | if HaveStoredInteger(udg_GC, "degat", I2S(H2I(target)) ) == true then |
"== true" ne sert a rien. Tu peux directement remplacer par
Jass: | if HaveStoredInteger(udg_GC, "degat", I2S(H2I(target)) ) then |
Pourquoi ? Parce que HaveStoredInteger renvoit de toutes façons un booléen, et c'est ce dont a besoin un if pour fonctionner. Il est donc inutile de le comparer a "true".
Ensuite, I2S(H2I(target)) est assez lent a s'exécuter, place le résultat dans une variable local plutot de le recalculer a chaque fois que tu en as besoin. Et cette remarque fonctionne pour tous les résultats calculés par des fonctions que tu devrais utiliser plusieurs fois. Il est toujours moins gourmand de les stocker quelque part. _________________
- La théorie c'est quand rien ne fonctionne mais tout le monde sait pourquoi.
- La pratique c'est quand tout fonctionne mais personne ne sait pourquoi.
- Chez moi la théorie et la pratique sont réunies, rien ne fonctionne et personne ne sait pourquoi. |
|
Revenir en haut |
|
|
Rhadamante Petit flooder
Inscrit le: 28 Aoû 2007 Messages: 1457 Sujets: 24 Spécialité en worldedit: Bêêh hé hé hé ! Médailles: 3 (En savoir plus...)
|
Posté le: 19/06/08 10:25 Sujet du message: |
|
|
Merci de tes réponses.
Une autre question, elles concernent les string :
Jass: | call DialogSetMessage( udg_ChoixType, "TRIGSTR_764" )
call DialogAddButton( udg_ChoixType, "TRIGSTR_765", 0 ) |
Est-ce qu'il vaut mieux garder "TRIGSTR_764" ou mettre directement le message, ou est-ce que ça change rien du tout ? _________________
|
|
Revenir en haut |
|
|
Magus Membre a fort taux de post
Inscrit le: 13 Oct 2007 Messages: 994 Sujets: 25 Spécialité en worldedit: Codeur
|
Posté le: 19/06/08 11:07 Sujet du message: |
|
|
En théorie ça change rien.
En pratique, c'est ce qu'on appel extériorisé les strings. Pourquoi ?
Je t'explique, imagine tu fais ton programme (ou ta carte) et un jour il te prend l'idée "Bon le français ça suxx, je vais traduire en anglais". Mais celui qui traduit n'est pas forcement programmeur et c'est d'ailleur dans le monde professionnel jamais le cas. Donc si le monsieur traducteur il doit se taper ton code pour traduire les strings qui s'affichent, il va se tirer une balle direct.
Donc on préfère mettre toutes les strings destinés a être lus par les utilisateurs au même endroit plutôt que de les écrires directement dans le code.
Maintenant, le GUI lui place ces strings dans un fichier a part. Tu peux très bien faire autrement, comme en faire des constants que tu déclareras au même endroit. _________________
- La théorie c'est quand rien ne fonctionne mais tout le monde sait pourquoi.
- La pratique c'est quand tout fonctionne mais personne ne sait pourquoi.
- Chez moi la théorie et la pratique sont réunies, rien ne fonctionne et personne ne sait pourquoi. |
|
Revenir en haut |
|
|
Rhadamante Petit flooder
Inscrit le: 28 Aoû 2007 Messages: 1457 Sujets: 24 Spécialité en worldedit: Bêêh hé hé hé ! Médailles: 3 (En savoir plus...)
|
Posté le: 19/06/08 11:20 Sujet du message: |
|
|
Je te remercie, j'avais compris le pourquoi mais je me demandais juste si ça avait une quelconque influence sur les performances ou autre.
Pour en revenir à :
Jass: | call DialogAddButton( udg_ChoixType, "TRIGSTR_765", 0 ) |
Le troisième argument c'est le "hotkey", ça correspond à quoi ? Si c'est pour indiquer la touche qui active ce bouton, et que vu que je suis censé mettre un entier, comment puis-je connaître les correspondances ? _________________
|
|
Revenir en haut |
|
|
Magus Membre a fort taux de post
Inscrit le: 13 Oct 2007 Messages: 994 Sujets: 25 Spécialité en worldedit: Codeur
|
Posté le: 19/06/08 11:31 Sujet du message: |
|
|
Bah alors la j'avoue que je me suis jamais posé la question :/ _________________
- La théorie c'est quand rien ne fonctionne mais tout le monde sait pourquoi.
- La pratique c'est quand tout fonctionne mais personne ne sait pourquoi.
- Chez moi la théorie et la pratique sont réunies, rien ne fonctionne et personne ne sait pourquoi. |
|
Revenir en haut |
|
|
Rhadamante Petit flooder
Inscrit le: 28 Aoû 2007 Messages: 1457 Sujets: 24 Spécialité en worldedit: Bêêh hé hé hé ! Médailles: 3 (En savoir plus...)
|
|
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: 21/06/08 14:08 Sujet du message: |
|
|
Avoir des strings extérieurs rallonge le temps de chargement de la map.
Au niveau performance je n'en sais trop rien, mais je suppose qu'utiliser un string extérieur est plus lent.
A choisir entre un string extérieur et un string constant je choisirais un string constant
@Rhadamante : le code ASCII koa, sauf pour la touche echap _________________
|
|
Revenir en haut |
|
|
|