Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
Keitaro_Ura Floodozaurus
Inscrit le: 21 Aoû 2007 Messages: 2073 Sujets: 38 Spécialité en worldedit: Oui Médailles: 1 (En savoir plus...)
|
|
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: 16/06/08 18:49 Sujet du message: |
|
|
Son code est du Jass si je me trompe pas , et en Jass il y a une différence entre rect (qui lui est forcément en forme de réctangle) et région (qui lui peut avoir n'importe quelle forme puisque c'est un assemblage de plusieurs rect). _________________
|
|
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: 16/06/08 22:12 Sujet du message: |
|
|
Une question basique de chez basique, mais sur laquelle je bute comme un bouseux : comment détruire les texttags ?
J'ai fait ce qui suis :
Jass: | function TextTagBar takes integer valeur, integer max, unit u, real zOffset, real size, real transparency, real lifespan returns nothing
local integer i = 0
local texttag bar = CreateTextTag()
local string s = "bla bla bla"
call SetTextTagText(bar, s, size * 0.023 / 10)
call SetTextTagPos(bar, GetUnitX(u) - (3 * max), GetUnitY(u), zOffset)
call SetTextTagColor(bar, 100, 100, 255, R2I((100.0-transparency) * 2.55))
call SetTextTagFadepoint(bar, lifespan)
call SetTextTagLifespan(bar, lifespan + 0.5)
call SetTextTagPermanent(bar, false)
call DestroyTextTag(bar)
set bar = null
endfunction |
Mais le texttag ne s'affiche tout simplement pas. Donc comment le détruire après l'avoir affiché (ce qui est le but à un moment donné ) ?
J'ai essayé en GUI également, et à moins de mettre un wait, ce qui est très gênant puisqu'il arrête tout, ça ne fonctionne pas. _________________
|
|
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: 16/06/08 22:25 Sujet du message: |
|
|
Utilise un timer. _________________
- 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: 16/06/08 22:53 Sujet du message: |
|
|
J'avais pensé au timer, mais est-ce que ça risque pas d'être trop lourd (comparé à ce que fait la fonction) ?
En plus si je fais appel à une autre fonction pour le timer, je vais devoir stocker le texttag à détruire à moins qu'il n'existe un moyen plus simple. _________________
|
|
Revenir en haut |
|
|
Deatrathias Membre actif
Inscrit le: 24 Mai 2008 Messages: 108 Sujets: 3 Spécialité en worldedit: Un peu de tout mais surtout beaucoup de rien.
|
Posté le: 16/06/08 22:54 Sujet du message: |
|
|
Si tu lui donne une durée de vie non permanente, il se détruira une fois expiré, pas besoin de le supprimer, c'est comme donner un temps limité à une unité. _________________
ಠ_ಠ |
|
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: 16/06/08 23:00 Sujet du message: |
|
|
Tu parle du texttag ? Donc en ne faisant que ça, ça irait :
Jass: | call SetTextTagLifespan(bar, lifespan + 0.5)
call SetTextTagPermanent(bar, false)
// plus besoin de ça ---> call DestroyTextTag(bar)
// et ça, je dois le garder ? ---> set bar = null
endfunction |
_________________
|
|
Revenir en haut |
|
|
Deatrathias Membre actif
Inscrit le: 24 Mai 2008 Messages: 108 Sujets: 3 Spécialité en worldedit: Un peu de tout mais surtout beaucoup de rien.
|
Posté le: 16/06/08 23:12 Sujet du message: |
|
|
Oui, juste en lui mettant une durée de vie, ça suffit à le supprimer, pas besoin du DestroyTextTag.
Par contre il faut quand même nullifier la variable locale. _________________
ಠ_ಠ |
|
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: 16/06/08 23:18 Sujet du message: |
|
|
Merci beaucoup d'avoir pris le temps de me répondre (surtout vu l'heure).
edit :
J'ai fait une map test pour le déclo en question. Et là j'ai remarquer un truc bizarre qui n'a rien à voir avec ma fonction mais avec un autre déclencheur que j'utilise pour montrer son utilisation :
Jass: | function Trig_Barre_Actions takes nothing returns nothing
local integer vie = R2I(GetUnitState(udg_Ferme, UNIT_STATE_LIFE) * 20.00 / GetUnitState(udg_Ferme, UNIT_STATE_MAX_LIFE))
//vérification pour le problème de calcul...
if GetUnitState(udg_Ferme, UNIT_STATE_LIFE) >= 500 and vie <= 19 then
set vie = 20
endif
// message de débug pour voir ce qui cloche...
call DisplayTextToPlayer(Player(0), 0, 0, R2S(1000 * GetUnitState(udg_Ferme, UNIT_STATE_LIFE)))
call TextTagBar(vie, 20, udg_Ferme, 50.0, 10.0, 0.0, 0.5)
endfunction
//===========================================================================
function InitTrig_Barre takes nothing returns nothing
set gg_trg_Barre = CreateTrigger( )
call TriggerRegisterTimerEvent( gg_trg_Barre, 0.50, true )
call TriggerAddAction( gg_trg_Barre, function Trig_Barre_Actions )
endfunction |
La première vérification n'a pas suffit et pour cause, le message de débug m'affichait à intervalle de temps réguliers la vie de la ferme.
Alors que je l'avais réparé complètement et qu'au début ça m'affichait 500,000.00 au bout de 20 secondes, voilà que la valeur diminue et passe à 499,999.906, puis 2~3 sec. plus tard 499,999.875, etc. diminuant progressivement.
J'ai pas poussé le test jusqu'à voir si la valeur finissait par se stabiliser mais c'est space. _________________
|
|
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 19:23 Sujet du message: |
|
|
Me revoilà, encore avec une question (à croire qu'à part ça et des blagues à 2 balles j'ai rien d'autres... ) ça concerne encore indirectement les textes flottants. Je m'essaye à une fonction pour afficher les dégâts comme ceux des coups critiques.
La fonction qui affiche fonctionne (!) normalement, mais le trigger qui y fait appel, je sais pas dire si quelque chose y cloche.
Le voici :
Jass: | function Trig_degatbis_Actions takes nothing returns nothing
local real damage = GetEventDamage()
local unit target = GetTriggerUnit()
call DisplayTextToPlayer(Player(0), 0, 0, "Text Tag - " + R2S(damage)) // débug
call TextTagDamage(damage, target, 50.0, 96.0, 90.0, 10, 0, 0.75) // affiche les dégats
call DestroyTrigger(GetTriggeringTrigger())
endfunction
//===========================================================================
function Trig_degat_Actions takes nothing returns nothing
local unit target = GetTriggerUnit()
local trigger trg_degatbis = CreateTrigger()
call DisplayTextToPlayer(Player(0), 0, 0, "Action") // débug
call TriggerRegisterUnitEvent( trg_degatbis, target, EVENT_UNIT_DAMAGED )
call TriggerAddAction( trg_degatbis, function Trig_degatbis_Actions )
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 |
Je vous saurais gré de m'éclairer à son sujet. _________________
|
|
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 21:59 Sujet du message: |
|
|
Et donc si une unité se fais attaquer plusieurs fois il y aura plusieurs déclencheur d'affichage ? _________________
- 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 22:20 Sujet du message: |
|
|
En gros ce que je veux c'est afficher (en faisant appel à la fonction TextTagDamage) les dégâts de chaque attaque portée contre chaque unité.
Et comme je sais pas récupérer les dégâts reçus par une unité quelconque, je me suis dit que j'allais détecter d'abord les unités attaqués, puis créer à chaque fois un déclencheur pour récupérer les dégâts reçus.
Dans la pratique, ça fonctionne, avec une dizaine d'ennemis qui se tatannent la gueule, leurs dégâts s'affichent comme il faut.
Mais est-ce la bonne solution, est-elle propre, n'y a-t-il pas meilleure méthode ? Voilà mes interrogations. _________________
|
|
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 22:36 Sujet du message: |
|
|
Ta solution est sur la bonne voie. Mais il ne faut pas créer de déclencheur pour une unité s'il existe déjà.
De plus, ton déclencheur leak. _________________
- 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 |
|
|
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:10 Sujet du message: |
|
|
Oh punaise j'avais pas vu que tu détruisais le déclencheur a chaque fois. Pour le leak il faut que tu mettes tes variables locales sur null.
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éé. _________________
- 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 |
|
|
|