| déplacer un objet vers un autre (ou un point) | |
|
|
Auteur | Message |
---|
blendman Utilisateur confirmé: Rang **
Messages : 433 Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.
| Sujet: déplacer un objet vers un autre (ou un point) Mer 9 Mar 2011 - 11:20 | |
| oui, je sais move_toward() Mais en fait, je voudrais non pas une fonction, mais le code qui permet de le faire (comme si la fonction n'existait pas dans GM ), histoire de l'adapter ailleurs . j'ai bien testé ça, mais bien sur, ça ne marche pas comme convenu : - Code:
-
if round(x)!=round(cible_x) and round(y)!=round(cible_y) { //move_towards_point(cible_x,cible_y,5) if x > cible_x and y = cible_y {x-=5} if x < cible_x and y = cible_y {x+=5}
if x > cible_x and y > cible_y {x-=5; y-=5 } if x > cible_x and y < cible_y {x-=5; y+=5}
if x < cible_x and y > cible_y {x+=5; y-=5} if x < cible_x and y < cible_y {x+=5; y+=5}
if x = cible_x and y < cible_y {y+=5} if x = cible_x and y > cible_y {y-=5}
} L'idée étant de convertir ce code pour l'utiliser dans un autre logiciel, donc c'est plus la méthode qui m'intéresse Merci. |
|
| |
louckas Utilisateur confirmé: Rang *
Messages : 296 Projet Actuel : Ultimate worms
| Sujet: Re: déplacer un objet vers un autre (ou un point) Mer 9 Mar 2011 - 11:55 | |
| moi pour remplacer sa j'avais plutôt un code du genre
if x>x_cible {x-=5}
if x<x_cible {x+=5}
if y>y_cible {y-=5}
if y>y_cible {y+=5} |
|
| |
blendman Utilisateur confirmé: Rang **
Messages : 433 Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.
| Sujet: Re: déplacer un objet vers un autre (ou un point) Mer 9 Mar 2011 - 12:06 | |
| - louckas a écrit:
- moi pour remplacer sa j'avais plutôt un code du genre
if x>x_cible {x-=5}
if x<x_cible {x+=5}
if y>y_cible {y-=5}
if y>y_cible {y+=5} hélas, ce code ne fonctionne pas non plus comme le code move_towards |
|
| |
Oculus Utilisateur confirmé: Rang *****
Messages : 1688
| Sujet: Re: déplacer un objet vers un autre (ou un point) Mer 9 Mar 2011 - 12:41 | |
| - Code:
-
if (not variable_local_exists("vitesse")) vitesse = 5; if (not variable_local_exists("xx")) xx = x; if (not variable_local_exists("yy")) yy = y;
if (mouse_check_button(mb_left)) { xx = mouse_x; yy = mouse_y; }
repeat (vitesse) { if (x != xx or y != yy) { if (x < xx) x += 1; else if (x > xx) x -= 1; if (y < yy) y += 1; else if (y > yy) y -= 1; } else break; } Normalement ça marche. |
|
| |
blendman Utilisateur confirmé: Rang **
Messages : 433 Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.
| Sujet: Re: déplacer un objet vers un autre (ou un point) Mer 9 Mar 2011 - 12:57 | |
| - jbg77 a écrit:
-
- Code:
-
if (not variable_local_exists("vitesse")) vitesse = 5; if (not variable_local_exists("xx")) xx = x; if (not variable_local_exists("yy")) yy = y;
if (mouse_check_button(mb_left)) { xx = mouse_x; yy = mouse_y; }
repeat (vitesse) { if (x != xx or y != yy) { if (x < xx) x += 1; else if (x > xx) x -= 1; if (y < yy) y += 1; else if (y > yy) y -= 1; } else break; } Normalement ça marche.
hélas non :p ça ne fait pas une seule trajectoire en ligne droite (comme move_towards), mais la trajectoire en "casser" en deux J'ai l'impression que ce n'est pas si facile que ça en fait lol Edit : bon, j'ai trouvé (j'ai été un peu aidé ) create de l'objet crée : - Code:
-
u =0; cible_x =mouse_x cible_y=mouse_y
step event - Code:
-
if u<=1 { x = x+u* (cible_x - x) y = y+u* (cible_y - y) u+=0.1 }
voiloutch:) |
|
| |
Oculus Utilisateur confirmé: Rang *****
Messages : 1688
| Sujet: Re: déplacer un objet vers un autre (ou un point) Mer 9 Mar 2011 - 13:29 | |
| Ah je me disais bien qu'il fallait soustraire x et cible_x. |
|
| |
blendman Utilisateur confirmé: Rang **
Messages : 433 Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.
| Sujet: Re: déplacer un objet vers un autre (ou un point) Mer 9 Mar 2011 - 13:49 | |
| - jbg77 a écrit:
- Ah je me disais bien qu'il fallait soustraire x et cible_x.
par contre, la vitesse n'est pas vraiment constante, mais bon, c'est un bon départ |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: déplacer un objet vers un autre (ou un point) Mer 9 Mar 2011 - 13:59 | |
| move_towards_point(g_x,g_y,vit) - Code:
-
d=point_direction(x,y,g_x,g_y) x+=lengthdir_x(vit,d) y+=lengthdir_y(vit,d) |
|
| |
Oculus Utilisateur confirmé: Rang *****
Messages : 1688
| Sujet: Re: déplacer un objet vers un autre (ou un point) Mer 9 Mar 2011 - 14:04 | |
| - D-z a écrit:
- move_towards_point(g_x,g_y,vit)
- Code:
-
d=point_direction(x,y,g_x,g_y) x+=lengthdir_x(vit,d) y+=lengthdir_y(vit,d) Faut faire la fonction lengthdir et point_direction maintenant |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: déplacer un objet vers un autre (ou un point) Mer 9 Mar 2011 - 14:15 | |
| lengthdir_x(len,dir) - Code:
-
return cos(degtorad(dir))*len lengthdir_y(len,dir) - Code:
-
return -sin(degtorad(dir))*len degtorad(a) - Code:
-
return a*pi/180 radtodeg(a) - Code:
-
return a/pi*180 point_direction(x1,y1,x2,y2) - Code:
-
if x1=x2 {if y1>y2 return 90 if y2>y1 return -90 return 0 } return radtodeg(arctan((y2-y1)/(x2-x1))) If I'm not mistaken. |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: déplacer un objet vers un autre (ou un point) Mer 9 Mar 2011 - 14:20 | |
| Tout m'a l'air bon. En tout cas cette méthode est conseillé plutôt que l'autre |
|
| |
blendman Utilisateur confirmé: Rang **
Messages : 433 Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.
| Sujet: Re: déplacer un objet vers un autre (ou un point) Mer 9 Mar 2011 - 16:45 | |
| - D-z a écrit:
- If I'm not mistaken.
wahou merci D-z. j'ai essayé de tout "traduire", mais visiblement, soit j'ai fait une erreur, soit il y a un petit soucis dans le résultat : Le code est donc : - Code:
-
if x=cible_x { if y>cible_y dir= 90 else if cible_y>y dir= -90 else if cible_y=y dir = 0 } else {dir= (arctan((cible_y-y)/(cible_x-x)))/pi*180 }
x+= cos(dir*pi/180)*vit y+= sin(dir*pi/180)*vit
Si on clique à droite de l'objet, tout va bien. Mais si on clique à gauche, ça ne marche pas correctement. |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: déplacer un objet vers un autre (ou un point) Mer 9 Mar 2011 - 18:03 | |
| Bon il y a une aberration logique : le "if cible_y=y" est inutile, si un nombre n'est ni supérieur ni inférieur à un autre il lui est forcément égal :p Mais ce n'est pas ça qui cloche. Je pense que ça déconne au niveau des conversions degrés/radians (ça marche à droite puisque le 0 est à droite, donc l'erreur ne se voit pas). Assure-toi que arctan() retourne un résultat en radians et que sin et cos prennent une valeur en radians comme paramètre. Et détail, mais non des moindres, l'axe y informatique est orienté vers le bas alors que l'axe trigonométrique est orienté vers le haut, il faut donc décrémenter y de sin(...). Voici le code en partie corrigé : - Code:
-
if x=cible_x { if y>cible_y dir= 90 else if cible_y>y dir= -90 else dir = 0 } else dir=arctan((cible_y-y)/(cible_x-x))
x+= cos(dir)*vit y-= sin(dir)*vit Ça, ça marche si arctan, sin et cos gèrent tous la même unité d'angle, mais apparemment ce n'est pas le cas, donc trifouille en remettant une des deux fonctions de conversion. Note : je te suis dans ton idée mais à ta place je laisserais un code dispatché sur plusieurs fonctions, c'est plus propre et tu peux utiliser lesdites fonctions séparément
Dernière édition par D-z le Mer 9 Mar 2011 - 18:48, édité 1 fois |
|
| |
blendman Utilisateur confirmé: Rang **
Messages : 433 Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.
| Sujet: Re: déplacer un objet vers un autre (ou un point) Mer 9 Mar 2011 - 18:27 | |
| - D-z a écrit:
Voici le code en partie corrigé : - Code:
-
if x=cible_x { if y>cible_y dir= 90 else if cible_y>y dir= -90 else dir = 0 } else dir=arctan((cible_y-y)/(cible_x-x))
x+= cos(dir)*vit y+= sin(dir)*vit Ça, ça marche si arctan, sin et cos gèrent tous la même unité d'angle, mais apparemment ce n'est pas le cas, donc trifouille en remettant une des deux fonctions de conversion. hélas, ça donne exactement la même chose que précédemment. Je vais continuer à regarder d'où peut venir le problème :p. Sinon, voici le fichier sur lequel je teste ça : http://blendman.free.fr/dev/gm/point_distance.gmk - Citation :
- Note : je te suis dans ton idée mais à ta place je laisserais un code dispatché sur plusieurs fonctions, c'est plus propre et tu peux utiliser lesdites fonctions séparément
tout à fait, je comprends bien . Mais pour le moment, j'essaie juste d'avoir un bon résultat . Ensuite, je referai tout ça, en gardant chaque code séparément, car ça peut être utile. |
|
| |
Invité Invité
| Sujet: Re: déplacer un objet vers un autre (ou un point) Mer 9 Mar 2011 - 18:48 | |
| sinon tu peux utiliser arctan2 - Code:
-
dir=arctan2((cible_y-y),(cible_x-x))
x+= cos(dir)*vit y+= sin(dir)*vit bon par contre j'ai essayé dans ton fichier et du coup les projectiles font du sur place une fois qu'ils ont atteint (cible_x,cible_y), mais il suffit de calculer la direction qu'une fois le code de D-z est plus pro, mais arctan2 est une fonction assez répandue et pratique (après désolé si arctan est plus rapide, je savais pas ) |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: déplacer un objet vers un autre (ou un point) Mer 9 Mar 2011 - 19:01 | |
| Bon d'une j'ai oublié de corriger la décrémentation de y -_-' Ensuite apparemment j'ai juste fait un gros fumble sur l'utilisation de l'arc-tangente... Donc ce bout de code marche, bien que je l'aie "bricolé" ('tit peu de mal avec la trigo moi...) - Code:
-
if x=cible_x { if y>cible_y dir= 90 else if cible_y>y dir= -90 else dir = 0 } else { dir=arctan((cible_y-y)/(x-cible_x)) if cible_x<x dir+=pi }
x+= cos(dir)*vit y-= sin(dir)*vit En fait il n'y avait pas de problème de conversion, tous les angles sont bien en radians. Par contre du coup c'est mon point_direction() qui fail, si qu'elqu'un a une meilleure méthode |
|
| |
Contenu sponsorisé
| Sujet: Re: déplacer un objet vers un autre (ou un point) | |
| |
|
| |
| déplacer un objet vers un autre (ou un point) | |
|