limiter la rotation d'un objet tourné vers le viseur[RESOLU]

Re bonjour / bonsoir

Je me demandais s’il était possible, comme le titre du sujet l’indique, de limiter la rotation d’un objet qui est tourné ver le viseur. Ledit objet est la tête de mon hero qui regarde toujours la direction visée par la souris. Le problème étant que quand on met la souris vers le bas, bah, vu qu’elle n’a pas d’os, sa tête prend une direction assez anormale…

Explication visuelle :
Ce qu’il se passe quand on vise une direction proche de 90
regard_bas_mauvais.jpg

regard_bas_limite.jpg

Concrétement, il faudrait que :
quand “viseur” (ou “tête” d’ailleurs, peu importe mais “viseur” me permettrait de pouvoir lui coller d’autres actions sans m’embrouiller dans mes objets) a une direction > à 75 et < à 105 (par rapport au hero) alors “tête” n’est pas tourné vers “viseur” et l’inverse quand les valeurs de direction sont différentes. Mais je ne trouve pas de condition permettant de faire ça.

J’espère que vous me comprendrez.

Merci, bye à bientôt !

En gros: Quand angle tête = “ce que tu veut” alors stop la rotation

hatomike, attention.
D’une part ça ne marchera pas car ici l’angle est directement modifié pour se tourner vers le viseur.
D’autre part, il faut toujours mieux utiliser des inégalités quand on teste un angle : Il y a très peu de chance que l’angle soit égal pile à l’angle que tu souhaite. Par exemple, si tu modifie régulièrement l’angle pour lui ajouter 15 degrés par secondes ( En faisant par exemple +15*TimeDelta() à la direction de TonObjet ) et que tu souhaite l’arrêter à 35°, dans 99% des cas tu n’atteindra jamais 35° pile. Il faut donc tester par exemple si l’angle est supérieur ou égal à 35°.
Le même genre de remarque s’applique quand on teste la position d’un objet : Dans la plupart des cas, ne pas tester si la position X est égale à quelque chose, mais tester plutôt si la position est dans un certain intervalle avec des inégalités

Pour le principe, je pense bien saisir mais je ne trouve pas la condition à utiliser pour l’appliquer…

En direction il n’y a que “dirigé vers un objet” ou “le numéro de la direction”

Ou y’a plus simple:
dans la rotation de ton objet tu rajoute des conditions “si le curseur est à tel endroit”

Je vois pas trop comment trouver un point précis pour mon curseur, alors j’ai tenté avec la position de la souris mais ça ne marche pas.

Voilà ce que j’ai fait :

  • La position X de la souris est > à 660
  • La position X de la souris est < à 620
  • La position Y de la souris est > à 400

alors tourner tête vers viseur

Un truc comme ça devrait marcher, non ? Sachant que les position sont sur mon calque “hud” qui est fixe. Je rajoute que la taille de la fenêtre de jeu est en 1280x800, au cas où les valeurs vous semblent bizarres.

Je crois qu’il faut faire: Entre “x/y” et “x/y”

Bon, je m’en sortais pas donc j’ai cherché une autre méthode.

J’ai créé un sprite triangulaire qui part de mon hero et va vers le bas de l’ecran et ai mis en condition à la rotation de la tête que le viseur ne devait pas être en contact avec ce sprite. Problème résolu.

Dans tous les cas merci de votre implication !

Je ne vois pas pourquoi un évènement comme celui-là ne marcherait pas … :confused:

Si Tete.Direction()>315
Tete.Direction()<45
alors Tourner l’objet Tête en direction de Viseur

// Là, on repositionne la tête automatiquement à zéro si le viseur est hors limites
Si [RIEN alors ]Mettre la direction de Tête à mod(Tête.Direction(),360)
Si Tete.Direction() >315 et Tete.Direction()<360 alors Mettre la direction de Tete à +1
Si Tete.Direction() <45 et Tete.Direction()>0 alors Mettre la direction de Tete à -1

'fin bon, si c’est résolu …

Bah juste parce que je suis mauvais…

Donc, nouvelle question : comment écrire un évènement avec les conditions que tu me donne ? Parce que je ne trouve pas… Le seul moyen que j’ai trouvé pour mettre une direction dans les conditions est dans “sprites”>“directions” et c’est soit pour tourner un objet vers un autre, soit pour mettre le n° de la direction d’un objet et j’ai bien essayé dans le doute de bidouiller avec ces deux options mais sans résultat… Donc soit y a un truc que je ne vois pas, soit un truc que je ne sais pas…

En tout cas, merci pour la formule magique !

Il faut bien que tu cliques sur “Ajouter une condition” (parce que les éléments que tu cites sont des actions, tu n’es pas dans le bon menu).
Dans les conditions, il faut tester : Sprites > Direction > Numéro de direction.
C’est un peu bizarre. En fait, le numéro de direction est utilisé quand un sprite est en mode “8 direction”. Sinon, cette condition teste la rotation en degrés du “mode automatique”.

D’ailleurs dans la prochaine version, je rajouterai des actions/conditions pour tester/modifier l’angle d’un objet.
Pour les objets Sprite qui sont en mode 8 directions, les actions/conditions relatives aux angles fonctionneront également : La direction la plus proche de l’angle sera utilisée.
Et si on voudra spécifier la direction exacte que l’on souhaite, il y aura toujours l’action habituelle de changement de direction.

Ça permettra d’avoir à la fois une interface commune pour modifier les angles des différents objets, tout en gardant la possibilité de choisir spécifiquement la direction voulue si jamais on utilise le mode 8 directions.

Excusez-moi d’être aussi mauvais mais je pense ne pas comprendre…

J’ai donc fait :
[attachment=2]event_headz0.png[/attachment]

Sans résultat… Alors, dans le doute, j’ai fait :
[attachment=1]event_headz1.png[/attachment]

Et ça ne marche pas non plus…

Et au passage, là non plus je n’ai peut être pas compris mais il me semble bien être dans les conditions dans mon message précédant :
[attachment=0]events_conditions.png[/attachment]

Mais je me suis peut-être mal exprimé…

Après, vous embêtez pas trop, au pire, mon sprite triangulaire marche relativement bien pour le moment…

Sur ce, merci encore de votre implication.

Bye, à bientôt !

Le souci, c’est qu’un angle ne peut pas être supérieur simultanément à 315 et inférieur à 45. Ca marcherait avec -45 et 45, ou 315 et 405.
GD vérifie si les deux conditions sont valides. Et comme il y en a forcément une qui est fausse sur les deux, l’action n’est pas activée.

Ce que tu peux faire, c’est :
Si angle >=0 et angle <45 alors tourner vers viseur

Si angle >=315 et angle <360 alors tourner vers viseur

Si angle >=135 et angle <180 alors tourner vers viseur

Si angle >=180 et angle <225 alors tourner vers viseur

A noter que les angles attribués par GD sont souvent entre -180 et +180 degrés. En utilisant le debugger, tu pourra consulter directement la valeur de la direction pour t’assurer que tes tests sont corrects.