Aller au contenu
  • 0

[URGENT] Axe de direction (nord, sud, etc..)


Question

Posté(e)

Bonsoir,

 

Je viens rarement sur ce forum, mais j'ai vraiment besoin d'aide la.

 

Cela fait plusieurs jour que je cherche, et toujours actuellement à faire un système semblable à celui d'Epicube dans les UHC/RUN pour m'amuser avec des amis, mais je n'arrive à rien.

 

Le système est un système qui permet d'indiquer la position du joueur.

 

wBx0bok.png

 

  • Ce que j'ai réussi à faire :

J'ai réussi à faire en fonction de la position du joueur la flèche change de couleur, par exemple s'il est pas trop loin elle devient bleue, si le joueur est très loin, elle devient rouge.

 

  • Ce que je cherche à faire :

Je cherche à faire que la flèche détecte la position du joueur, c'est à dire si le joueur est au nord cela m'indique une flèche menant vers en haut, et pareil pour le reste :

  • Si le la destination du joueur est à des coordonnées vers le Nord, la flèche indiquera "^".
  • Si le la destination du joueur est à des coordonnées vers le Sud, la flèche indiquera "v".
     
  • Si le la destination du joueur est à des coordonnées vers le Est, la flèche indiquera ">".
     
  • Si le la destination du joueur est à des coordonnées vers le West, la flèche indiquera "<".

 

  • Mes recherches actuelles :

- J'ai fait un test pour voir la direction du joueur, mais sans succès.

 

if {Player2}'s horizontal facing is west:

 

Si vous arrivez, à me trouver la solution je vous en serais reconnaissant

 

Mes salutations,

Corentin.

18 réponses à cette question

Messages recommandés

  • 0
Posté(e)
Bonsoir,

Donc pour résumé tu aimerais mètre les deux coordonnées Y à 0 ?

Pour résumer,

 

Je souhaiterais faire un système qui indique une flèche qui bouge de direction (nord, sud, est, ouest) etc. en fonction de la position du joueur, et qui devient bleue si le joueur est proche du joueur2, et rouge si le joueur est loin.

 

Pour l'instant :

 

La fonction de la flèche rouge et bleue, je l'ai trouvé, je souhaiterais juste que cela calcul uniquement le X et Z et pas le Y.

La fonction de direction de la flèche (nord, sud, etc.) j'ai aucune piste.

  • 0
Posté(e)

Alors pour ton premier problème (tenir compte uniquement du X/Z), je peux te conseiller Pythagore, qui te permet d'obtenir la distance sur un plan 2D :

set {_coordx1} to x-position of player
set {_coordx2} to x-position of {player2}
set {_distx} to {_coordx2} - {_coordx1}
set {_coordz1} to z-position of player
set {_coordz2} to z-position of {player2}
set {_distz} to {_coordz2} - {_coordz1}
set {_distxz} to sqrt of ({_distx}^2 + {_distz}^2)

Et du coup tu obtiens la distance entre les deux joueurs en prenant juste compte de X et de Z. (quand tu incorpores ce code dans ton script, oublie pas l'incrémentation ^^)

 

Pour la flèche, je réfléchis encore ^^

  • 0
Posté(e)
Alors pour ton premier problème (tenir compte uniquement du X/Z), je peux te conseiller Pythagore, qui te permet d'obtenir la distance sur un plan 2D :

set {_coordx1} to x-position of player
set {_coordx2} to x-position of {player2}
set {_distx} to {_coordx2} - {_coordx1}
set {_coordz1} to z-position of player
set {_coordz2} to z-position of {player2}
set {_distz} to {_coordz2} - {_coordz1}
set {_distxz} to sqrt of ({_distx}^2 + {_distz}^2)

Et du coup tu obtiens la distance entre les deux joueurs en prenant juste compte de X et de Z. (quand tu incorpores ce code dans ton script, oublie pas l'incrémentation ^^)

 

Pour la flèche, je réfléchis encore ^^

Je ne comprend pas tout, il faut que je fasse comment maintenant avec ce code, pour faire une commande, par exemple /info qui me dit la distance entre le j1 et le j2 ?

 

En tout cas, merci, je n'ai jamais eu à faire à Pythagore ^^

Si tu réussis la flèche, tu es mon sauveur. :)

  • 0
Posté(e)

Il y a un peut plus simple,:

set {_locplayer} to location of player
set {_locplayer2} to location of {player2}
set y-coordnate of {_locplayer} to 0
set y-coordnate of {_locplayer2} to 0
if distance between {_locplayer} and {_locplayer2} is less than or equal to 50:

(Pourquoi utiliser {player2} et non {_player2} ?)

 

Sinon petit indice pour la seconde les rotations reste inchangé dans minecraft.

  • 0
Posté(e)
Il y a un peut plus simple,:

set {_locplayer} to location of player
set {_locplayer2} to location of {player2}
set y-coordnate of {_locplayer} to 0
set y-coordnate of {_locplayer2} to 0
if distance between {_locplayer} and {_locplayer2} is less than or equal to 50:

(Pourquoi utiliser {player2} et non {_player2} ?)

 

Sinon petit indice pour la seconde les rotations reste inchangé dans minecraft.

Effectivement c'est plus facile. Merci ! ;)

Pour ton indice, comment ça inchangé ?

  • 0
Posté(e)
Simplement la rotation du joueur indique la direction ou il regarde, mais il me semble que skript a une expression qui calcule ça déjà, je vais vérifier ;)

D'accord, merci.

Si tu trouves, tiens moi au courant, car j'ai beau chercher je ne trouve pas les maudites flèches D:

Merci également @JDM de m'avoir aidé, malgré ta solution assez difficile à la compréhension x).

  • 0
Posté(e)

Humm petite question, pour ton souci de direction, tu l'actualise par rapport a la direction ou regarde le joueur ?

Du style si le joueur regarde le sud alors que sont pote est au nord alors tu à une flèche "v" ?

  • 0
Posté(e)
Humm petite question, pour ton souci de direction, tu l'actualise par rapport a la direction ou regarde le joueur ?

Du style si le joueur regarde le sud alors que sont pote est au nord alors tu à une flèche "v" ?

Exact, et je sais que c'est pas ça qu'il faut faire, j'effectue des tests ^^

 

EDIT

Quelqu'un m'a proposé d'utiliser ce code :

sqrt((y2 - y1)^2 + (x2 - x1)^2),

 

Mais je ne le comprend pas, donc impossible à exploiter.

  • 0
Posté(e)

D'acc donc pour commencer il faut récupérer la direction dans la quel regarde le joueur "%facing of player%" ensuite vérifier un part un la distance en ajoutant +1 à X, +1 Z, -1 X et -1 X toujours en partant des coordonnées principal, puis on va vérifier le quel parmi les quatre a un distance plus petite que la distance originel et pour terminer grasse a la rotation on vérifiera a quel facing direction ça correspond :)

 

C'est un peut complexe mais totalement faisable, si j'ai le temps se soir je fait ça.

  • J'aime 1
  • 0
Posté(e)
D'acc donc pour commencer il faut récupérer la direction dans la quel regarde le joueur "%facing of player%" ensuite vérifier un part un la distance en ajoutant +1 à X, +1 Z, -1 X et -1 X toujours en partant des coordonnées principal, puis on va vérifier le quel parmi les quatre a un distance plus petite que la distance originel et pour terminer grasse a la rotation on vérifiera a quel facing direction ça correspond :)

 

C'est un peut complexe mais totalement faisable, si j'ai le temps se soir je fait ça.

D'accord merci beaucoup de ton aide :).

 

J'ai un code expérimental (non-testé) à proposer. Là aussi, je pense pas avoir fait dans la dentelle ^^' :

set {_coordx1} to x-position of player
set {_coordx2} to x-position of {player2}
set {_distx} to {_coordx2}-{_coordx1}
set {_coordz1} to z-position of player
set {_coordz2} to z-position of {player2}
set {_distz} to {_coordz2}-{_coordz1}
--On récupère les coordonnées du vecteur Joueur1->Joueur2
set {_distxz} to sqrt of ({_distx}^2+{_distz}^2) -- Norme du vecteur
set {_cosangle} to {_distx} / {_distxz}
set {_sinangle} to {_distz} / {_distxz}
if {_cosangle} is between -1 and -0.33:
if {_sinangle} is between -1 and -0.33:
	send "Direction NO !"
else if {_sinangle} is between -0.33 and 0.33:
	send "Direction O !"
else:
	send "Direction SO !"
else if {_cosangle} is between -0.33 and 0.33:
if {_sinangle} is between -1 and -0.33:
	send "Direction N !"
else if {_sinangle} is between -0.33 and 0.33:
	send "Direction X !"
else:
	send "Direction S !"
else:
if {_sinangle} is between -1 and -0.33:
	send "Direction NE !"
else if {_sinangle} is between -0.33 and 0.33:
	send "Direction E !"
else:
	send "Direction SE !"

 

Comment ça marche ? Pour ceux que ça intéresse, j'utilise la trigonométrie (cosinus et sinus sur le cercle trigonométrique) pour déterminer un encadrement de l'angle entre les deux joueurs.

 

Je te laisse ajuster le message des directions pour indiquer une belle flèche, éventuellement inverser quelques directions (j'ai mis ces directions car elles me semblaient logique mais je pense que quelques ajustements devraient être nécessaires).

Coucou, je test cela et je te dit

 

 

 

En tout, cas merci énormément à vous 2 de m'aider.

  • 0
Posté(e)

Après test; @JDM ta solution marche, sauf que n'ayant jamais utilisé de système de ce genre, étant débutant.

Serait t'il juste possible que tu me redonnes le code sans les SO, NO, NE etc.

 

Juste avec : Nord, Sud, Est, Ouest.

 

Et si tu as le temps, et l'envie me décrire ce que fait chaque ligne, pour que je comprenne le code, et comme ça, je sais comment le "reproduire", et l'apprend.

  • 0
Posté(e)

set {_coordx1} to x-position of player
set {_coordx2} to x-position of {player2}
set {_distx} to {_coordx2}-{_coordx1}
set {_coordz1} to z-position of player
set {_coordz2} to z-position of {player2}
set {_distz} to {_coordz2}-{_coordz1}
--On récupère les coordonnées du vecteur Joueur1->Joueur2
set {_distxz} to sqrt of ({_distx}^2+{_distz}^2) -- Norme du vecteur
set {_cosangle} to {_distx} / {_distxz}
set {_sinangle} to {_distz} / {_distxz}
if {_cosangle} is between -1 and -0.7:
       send "Direction O !"
else if {_cosangle} is between 0.7 and 1:
       send "Direction E !"
else if {_sinangle} is between 0.7 and 1:
       send "Direction S !"
else:
       send "Direction N !"

Ca devrait marcher pour les 4 directions ^^

  • J'aime 1
  • 0
Posté(e)
set {_coordx1} to x-position of player
set {_coordx2} to x-position of {player2}
set {_distx} to {_coordx2}-{_coordx1}
set {_coordz1} to z-position of player
set {_coordz2} to z-position of {player2}
set {_distz} to {_coordz2}-{_coordz1}
--On récupère les coordonnées du vecteur Joueur1->Joueur2
set {_distxz} to sqrt of ({_distx}^2+{_distz}^2) -- Norme du vecteur
set {_cosangle} to {_distx} / {_distxz}
set {_sinangle} to {_distz} / {_distxz}
if {_cosangle} is between -1 and -0.7:
       send "Direction O !"
else if {_cosangle} is between 0.7 and 1:
       send "Direction E !"
else if {_sinangle} is between 0.7 and 1:
       send "Direction S !"
else:
       send "Direction N !"

Ca devrait marcher pour les 4 directions ^^

 

Merci énormément !

 

Résolu !

  • 0
Posté(e)

Non justement car il était voulu dans un premier temps uniquement la distance sur le plan X-Z (sans prendre en compte l'altitude) ^^

  • J'aime 2
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.