online faq recherche accueil
 

Il y a 198 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

simuler un délai en glisse

 
n°4587273
Maximaxou
rejoignez les fidèles du JASS
Posté le 06-12-2006 à 08:45:19  profilanswer
 

En glisse (dans les escapes), à chaque fois qu'on effectue un clic, le personnage se tourne en direction du clic. J'aimerais simuler un délai, afin que le personnage tourne une seconde après le clic. Avec wait ça ne marche pas puisque cette fonction n'est pas assez précise (l'écart de temps entre deux clics est trop court). J'ai eu cette idée, avec deux déclencheurs :

Code :
  1. tourner slide
  2.     Evénements
  3.         Unité - A unit Reçoit un ordre avec point pour cible
  4.     Conditions
  5.         (Terrain type at (Position of (Triggering unit))) Egal à Glacier d'Icecrown - Glace
  6.         (Owner of (Triggering unit)) Différent de Joueur 12 (Marron)
  7.     Actions
  8.         Custom script:   local integer udg_un_entier = udg_ind_delai
  9.         Set point_delai[un_entier] = (Target point of issued order)
  10.         Set un_entier = (un_entier + 1)
  11.         If (All Conditions are True) then do (Then Actions) else do (Else Actions)
  12.             Si - Conditions
  13.                 un_entier Egal à 40
  14.             Alors - Actions
  15.                 Set un_entier = 0
  16.             Sinon - Actions
  17.         Set ind_delai = un_entier
  18.         Déclencheur - Turn on tourner effectivement <gen>


Code :
  1. tourner effectivement
  2.     Evénements
  3.         Temps - Every 1.00 seconds of game time
  4.     Conditions
  5.     Actions
  6.         Custom script:   local integer udg_un_entier = udg_ind_delai2
  7.         Unité - Make ts_persos[0] face point_delai[un_entier] over 0.00 seconds
  8.         Set un_entier = (un_entier + 1)
  9.         If (All Conditions are True) then do (Then Actions) else do (Else Actions)
  10.             Si - Conditions
  11.                 un_entier Egal à 40
  12.             Alors - Actions
  13.                 Set un_entier = 0
  14.             Sinon - Actions
  15.         Set ind_delai2 = un_entier
  16.         Déclencheur - Turn off (This trigger)


 
avec ce dernier déclencheur pour éteindre le déclencheur ci-dessus au départ :

Code :
  1. pas tourner depart
  2.     Evénements
  3.         Map initialization
  4.     Conditions
  5.     Actions
  6.         Déclencheur - Turn off tourner effectivement <gen>


 
Ca ne marche pas à cause du fait qu'à chaque clic on démarre le déclencheur "tourner effectivement" alors que celui-ci est déja en route. Donc à priori il faudrait créer un nouveau déclencheur à chaque fois mais je ne sais pas si c'est possible.

n°4587274
Ayane
Posté le 06-12-2006 à 13:59:21  profilanswer
 

Les variables locales ne fonctionnent pas en condition d'un structure car cela créer une nouvelle fonction, cela fait donc référence à la variable globale.
Un wait ne devrait pas poser de problèmes pour une seconde.

n°4587277
Maximaxou
rejoignez les fidèles du JASS
Posté le 07-12-2006 à 00:35:17  profilanswer
 

Si, le wait pose un problème puisque comme je l'ai dit l'écart entre deux clics est trop court.
 

Citation :

Les variables locales ne fonctionnent pas en condition d'un structure car cela créer une nouvelle fonction, cela fait donc référence à la variable globale.

Je ne comprends pas ce que tu veux dire par là.


Message édité par Maximaxou le 07-12-2006 à 00:35:31
n°4587279
Ayane
Posté le 07-12-2006 à 13:26:05  profilanswer
 

Code :
  1. If (All Conditions are True) then do (Then Actions) else do (Else Actions)
  2.              Si - Conditions
  3.                  un_entier Egal à 40


un_entier fait ici référence à la variable globale.
 
Moi je ne comprend pas ce que tu veux dire par l'écart entre deux clics est trop court.

n°4587280
Maximaxou
rejoignez les fidèles du JASS
Posté le 07-12-2006 à 15:05:03  profilanswer
 

d'accord pour la variable globale j'ai compris.

Citation :

Moi je ne comprend pas ce que tu veux dire par l'écart entre deux clics est trop court.


admettons que tu utilises ceci comme trigger :

Code :
  1. tourner
  2.     Evénements
  3.         Unité - A unit Reçoit un ordre avec point pour cible
  4.     Conditions
  5.         (Terrain type at (Position of (Triggering unit))) Egal à Glacier d'Icecrown - Glace
  6.     Actions
  7.         Custom script:   local location udg_p1
  8.         Set p1 = (Target point of issued order)
  9.         Wait 1.00 seconds
  10.         Unité - Make (Triggering unit) face p1 over 0.00 seconds


Si tu fais deux clics avec un faible écart entre les deux, ce trigger sera exécuté deux fois d'affilé, et le moment ou l'unité tournera ne sera pas du tout précis. En pratique, on dirait que sur plusieurs clics rapides, un seul d'entre eux est pris en compte.

n°4587281
Maximaxou
rejoignez les fidèles du JASS
Posté le 07-12-2006 à 15:18:48  profilanswer
 

Mais de toute façon j'ai trouvé la solution, il faut utiliser des compteurs. J'ai donc trois triggers.
 
Celui-ci fait tourner le perso :

Code :
  1. function Trig_tourner_effectivement_Actions takes nothing returns nothing
  2.     local integer un_entier = udg_ind_delai_slide2
  3.     call SetUnitFacingToFaceLocTimed( udg_ts_persos[udg_nb_char_max], udg_point_delai_slide[un_entier], 0.00 )
  4.     set un_entier = ( un_entier + 1 )
  5.     if ( un_entier == 10 ) then
  6.         set un_entier = 0
  7.     endif
  8.     set udg_ind_delai_slide2 = un_entier
  9. endfunction
  10. //===========================================================================
  11. function InitTrig_tourner_effectivement takes nothing returns nothing
  12.     set gg_trg_tourner_effectivement = CreateTrigger(  )
  13.     call TriggerAddAction( gg_trg_tourner_effectivement, function Trig_tourner_effectivement_Actions )
  14. endfunction


 
Celui-ci donne les évènements du précédent.

Code :
  1. ajout evenements compteurs slide
  2.     Evénements
  3.         Map initialization
  4.     Conditions
  5.     Actions
  6.         For each (Integer A) from 0 to 9, do (Actions)
  7.             Boucle - Actions
  8.                 Déclencheur - Add to tourner effectivement <gen> the event (Temps - compteur_delai_slide[(Integer A)] expires)


 
Celui-ci s'éxécute à chaque clic et règle les compteurs.

Code :
  1. function Trig_tourner_slide_Conditions takes nothing returns boolean
  2.     if ( GetTerrainTypeBJ(GetUnitLoc(GetTriggerUnit())) != 'Iice' ) then
  3.         return false
  4.     endif
  5.     return true
  6. endfunction
  7. function Trig_tourner_slide_Actions takes nothing returns nothing
  8.     local integer un_entier = udg_ind_delai_slide
  9.     set udg_point_delai_slide[un_entier] = GetOrderPointLoc()
  10.     call StartTimerBJ( udg_compteur_delai_slide[un_entier], false, udg_delai )
  11.     set un_entier = ( un_entier + 1 )
  12.     if ( un_entier == 10 ) then
  13.         set un_entier = 0
  14.     endif
  15.     set udg_ind_delai_slide = un_entier
  16. endfunction
  17. //===========================================================================
  18. function InitTrig_tourner_slide takes nothing returns nothing
  19.     set gg_trg_tourner_slide = CreateTrigger(  )
  20. //il y a l'évènement "l'unité reçoit un ordre avec point pour cible mais il est ajouté avec un autre déclencheur
  21.     call TriggerAddCondition( gg_trg_tourner_slide, Condition( function Trig_tourner_slide_Conditions ) )
  22.     call TriggerAddAction( gg_trg_tourner_slide, function Trig_tourner_slide_Actions )
  23. endfunction


 
J'ai fait 10 compteurs, 10 variables point, ce qui permet de faire 10 clics par période de délai.
udg_ind_delai_slide et udg_ind_delai_slide2 sont tous deux initialisés à 0.


Message édité par Maximaxou le 07-12-2006 à 15:20:21
n°4587282
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 07-12-2006 à 17:12:46  profilanswer
 

j'en vois pas trop l'intérêt mais bon c'est ta map  :D

n°4587283
Maximaxou
rejoignez les fidèles du JASS
Posté le 08-12-2006 à 00:39:04  profilanswer
 

Hey, un grand fan de la glisse comme moi a besoin de pouvoir s'entraîner avec délai à tout moment ! Hm je rêve ou tu ne vois de l'intérêt à rien de ce que je fais/dis ? :cry:   :D
Pouvoir fixer le délai, et ce au centième de seconde près, c'est le rêve de tout escaper qui se respecte !


Message édité par Maximaxou le 08-12-2006 à 00:43:42
n°4587286
Troll-Brai​n
http://worldedit.free.fr/forum
Posté le 08-12-2006 à 12:31:24  profilanswer
 

bah si tu peux ne pas avoir de delai c'est beaucoup mieux xD.
Je ne savais pas qu'il existait une catégorie de gens appelés ridiculement "escapers", ca doit être légèrement soulant de ne faire que ou principalement des escapes

n°4587290
Maximaxou
rejoignez les fidèles du JASS
Posté le 08-12-2006 à 18:10:28  profilanswer
 

pas pour moi en tout cas
 
au fait je ne fait pas que des escapes, loin de là : je joue aussi à worm war de temps en temps :D.
 

Citation :

bah si tu peux ne pas avoir de delai c'est beaucoup mieux xD.


oui sauf... quand t devenu trop fort et que ça t'ennuie de jouer sans délai


Message édité par Maximaxou le 09-12-2006 à 00:58:34

Aller à :
Ajouter une réponse