Inscrit le: 13 Jan 2009 Messages: 550 Sujets: 47 Spécialité en worldedit: La partie déclencheurs sauf le GUI.
Posté le: 23/09/12 12:51 Sujet du message: Problème de sélection
Problème relatif au slide. En mode reverse (où il faut cliquer derrière soi pour aller tout droit) le héros se tourne dos à la route (dans ma map). Au passage du slide normal au slide reverse ou inversement, le héros fait instantanément un 180°. Pour faire ce 180° j'ai utilisé la méthode de la suppression puis recréation de l'unité.
Recréation de l'unité implique sélection automatique de cette unité.
Le problème est que plus il y a de passage reverse --> slide / slide --> reverse en peut de temps, plus il arrive que la sélection ne se fasse pas.
Est-ce que la fonction de sélection de wc3 est foireuse ?
Par ailleurs j'envisage une solution alternative à la recréation de l'unité.
J'ai retrouvé ce topic : changer le facing angle d'une unité instantannément ? (avec une grosse faute d'orthographe faite par un noob).
Dans ce topic TB me conseille d'utiliser ce tutoriel.
Quelqu'un l'a-t-il déjà utilisé ? Il m'a l'air d'y avoir une grosse limitation qui se situe au niveau des animations : il me semble qu'on ne peut pas exécuter les animations d'un modèle attaché à une unité. Quelqu'un peut-il me le confirmer ?
Au cas où si ça vous intéresse voici comment je tourne l'unité instantanément :
Jass:
method turnInstantly takes real angle returns nothing
local TerrainType lastTerrainType = .lastTerrainType
local real x = GetUnitX(.hero)
local real y = GetUnitY(.hero)
local player array playersSelectingHero
local integer playersSelectingHeroLastId = -1
local integer i = 0
loop
exitwhen i > 11
if (IsUnitSelected(.hero, Player(i))) then
set playersSelectingHeroLastId = playersSelectingHeroLastId + 1
set playersSelectingHero[playersSelectingHeroLastId] = Player(i)
endif
set i = i + 1
endloop
call RemoveUnit(.hero)
set .hero = CreateUnit(.p, HERO_TYPE_ID, x, y, angle)
set i = 0
loop
exitwhen i > playersSelectingHeroLastId
call SelectUnitAddForPlayer(.hero, playersSelectingHero[i])
set i = i + 1
endloop
endmethod
Inscrit le: 21 Fév 2010 Messages: 1785 Sujets: 22 Spécialité en worldedit: La modestie Médailles: 1 (En savoir plus...)
Posté le: 23/09/12 14:18 Sujet du message:
Ben il y a bien ce bug, mais je suis pas persuadé à 100% que ton problème vient de là.
Pour la solution du dummy, en effet, c'est pas possible de choisir l'animation que doit jouer un attachement (ça joue automatiquement "birth" puis "stand" lors de la création et "death" lors de la destruction, sous réserve que ces animations existent).
Sinon, essaies avec une variable booléenne (à déploiement ou même avec des GetLocalPlayer) qui remplace la condition "IsUnitSelected" : ça permettra d'ignorer le petit laps de temps pendant lequel l'unité n'est pas considérée comme sélectionnée (si c'est vraiment ça le problème).
Dernière solution : tu sélectionnes tout le temps le héros pour son propriétaire lorsque tu le recréés.
Par contre, qu'est-ce que tu entends par "plus il y a de passage reverse en peut de temps" (avec une grosse faute d'orthographe faite par un noob, au passage ). Est-ce que le "peu de temps" est de l'ordre d'un Wait 0.00 seconds? _________________
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: 23/09/12 15:10 Sujet du message:
Ouai de cet ordre là il me semble, même si c'est instantané ou presque en solo, si je m'en rappelle bien et que cela n'a pas changé avec un patch.
Ça augmente probablement avec un temps de latence élevé entre les joueurs.
D'ailleurs même la méthode expliquée sur wc3c.net n'est pas instantané non plus il me semble mais c'est déjà beaucoup mieux.
Sinon reste peut être (je ne connais rien aux modèles) la possibilité de modifier le modèle utilisé pour l'unité "slide" pour rajouter X animations, pour X angles de rotation :p
Bonjour la taille du modèle je présume ... _________________
Inscrit le: 13 Jan 2009 Messages: 550 Sujets: 47 Spécialité en worldedit: La partie déclencheurs sauf le GUI.
Posté le: 24/09/12 00:53 Sujet du message:
fulldragon a écrit:
je pense plutôt (d'après l'utilisation des gens que j'ai vu) de l'ordre de 0.1 ou 0.2 seconde.
Oui c'est de cet ordre, voire même plus, mais plus on descend plus la désélection est fréquente.
[quote="tirlititi']Sinon, essaies avec une variable booléenne (à déploiement ou même avec des GetLocalPlayer) qui remplace la condition "IsUnitSelected" : ça permettra d'ignorer le petit laps de temps pendant lequel l'unité n'est pas considérée comme sélectionnée (si c'est vraiment ça le problème). [/Quote]
Je pensais que le problème venait de l'action de sélection, pas de "IsUnitSelected", mais tu as tout à fait raison... si je court-circuite le filtre "IsUnitSelected" la sélection ne foire JAMAIS c'est imba .
J'essaye donc avec des booléens car ça a l'air efficace et facile, comme avec le problème des sons de l'autre fois.
Je rencontre un problème, mon trigger de détection de la désélection de l'unité ne fonctionne pas :
Jass:
function Trig_Unselect_hero_Actions takes nothing returns nothing
call KillUnit(GetTriggerUnit())
if (IsHero(GetTriggerUnit())) then
call Hero2Escaper(GetTriggerUnit()).setIsHeroSelectedForPlayer(GetTriggerPlayer(), false)
endif
call BJDebugMsg("deselect")
endfunction
Page 1 sur 1 La question posée dans ce topic a été résolue !
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