AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
-39%
Le deal à ne pas rater :
Pack Home Cinéma Magnat Monitor : Ampli DENON AVR-X2800H, Enceinte ...
1190 € 1950 €
Voir le deal
-45%
Le deal à ne pas rater :
WHIRLPOOL OWFC3C26X – Lave-vaisselle pose libre 14 couverts – ...
339 € 622 €
Voir le deal

 

 déplacer un objet vers un autre (ou un point)

Aller en bas 
5 participants
AuteurMessage
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

déplacer un objet vers un autre (ou un point) Empty
MessageSujet: déplacer un objet vers un autre (ou un point)   déplacer un objet vers un autre (ou un point) EmptyMer 9 Mar 2011 - 11:20

oui, je sais move_toward() Very Happy

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 Smile), histoire de l'adapter ailleurs Smile.

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 Very Happy


Merci.
Revenir en haut Aller en bas
http://blendman.blogspot.com/
louckas
Utilisateur confirmé: Rang *
louckas


Messages : 296
Projet Actuel : Ultimate worms

déplacer un objet vers un autre (ou un point) Empty
MessageSujet: Re: déplacer un objet vers un autre (ou un point)   déplacer un objet vers un autre (ou un point) EmptyMer 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}

_________________
déplacer un objet vers un autre (ou un point) 16886
bneige bneige bneige bneige bneige
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

déplacer un objet vers un autre (ou un point) Empty
MessageSujet: Re: déplacer un objet vers un autre (ou un point)   déplacer un objet vers un autre (ou un point) EmptyMer 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 Smile
Revenir en haut Aller en bas
http://blendman.blogspot.com/
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

déplacer un objet vers un autre (ou un point) Empty
MessageSujet: Re: déplacer un objet vers un autre (ou un point)   déplacer un objet vers un autre (ou un point) EmptyMer 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.
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

déplacer un objet vers un autre (ou un point) Empty
MessageSujet: Re: déplacer un objet vers un autre (ou un point)   déplacer un objet vers un autre (ou un point) EmptyMer 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 Smile

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é Smile)

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:)
Revenir en haut Aller en bas
http://blendman.blogspot.com/
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

déplacer un objet vers un autre (ou un point) Empty
MessageSujet: Re: déplacer un objet vers un autre (ou un point)   déplacer un objet vers un autre (ou un point) EmptyMer 9 Mar 2011 - 13:29

Ah je me disais bien qu'il fallait soustraire x et cible_x.
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

déplacer un objet vers un autre (ou un point) Empty
MessageSujet: Re: déplacer un objet vers un autre (ou un point)   déplacer un objet vers un autre (ou un point) EmptyMer 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 Smile
Revenir en haut Aller en bas
http://blendman.blogspot.com/
D-z
Utilisateur confirmé: Rang *****
D-z


Messages : 1611
Localisation : Montpellier

déplacer un objet vers un autre (ou un point) Empty
MessageSujet: Re: déplacer un objet vers un autre (ou un point)   déplacer un objet vers un autre (ou un point) EmptyMer 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)

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
Oculus
Utilisateur confirmé: Rang *****



Messages : 1688

déplacer un objet vers un autre (ou un point) Empty
MessageSujet: Re: déplacer un objet vers un autre (ou un point)   déplacer un objet vers un autre (ou un point) EmptyMer 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 awesome
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
D-z


Messages : 1611
Localisation : Montpellier

déplacer un objet vers un autre (ou un point) Empty
MessageSujet: Re: déplacer un objet vers un autre (ou un point)   déplacer un objet vers un autre (ou un point) EmptyMer 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.

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


Messages : 9180
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

déplacer un objet vers un autre (ou un point) Empty
MessageSujet: Re: déplacer un objet vers un autre (ou un point)   déplacer un objet vers un autre (ou un point) EmptyMer 9 Mar 2011 - 14:20

Tout m'a l'air bon.
En tout cas cette méthode est conseillé plutôt que l'autre Wink

_________________
déplacer un objet vers un autre (ou un point) Runningpotato1déplacer un objet vers un autre (ou un point) TvF6GED déplacer un objet vers un autre (ou un point) MdetltS
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

déplacer un objet vers un autre (ou un point) Empty
MessageSujet: Re: déplacer un objet vers un autre (ou un point)   déplacer un objet vers un autre (ou un point) EmptyMer 9 Mar 2011 - 16:45

D-z a écrit:
If I'm not mistaken.
wahou Smile

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.



Revenir en haut Aller en bas
http://blendman.blogspot.com/
D-z
Utilisateur confirmé: Rang *****
D-z


Messages : 1611
Localisation : Montpellier

déplacer un objet vers un autre (ou un point) Empty
MessageSujet: Re: déplacer un objet vers un autre (ou un point)   déplacer un objet vers un autre (ou un point) EmptyMer 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 Smile

_________________
 
Home is not a place, it's a feeling.


Dernière édition par D-z le Mer 9 Mar 2011 - 18:48, édité 1 fois
Revenir en haut Aller en bas
blendman
Utilisateur confirmé: Rang **
blendman


Messages : 433
Projet Actuel : Crée des jeux, logiciels, BD, Romans et nouvelles.

déplacer un objet vers un autre (ou un point) Empty
MessageSujet: Re: déplacer un objet vers un autre (ou un point)   déplacer un objet vers un autre (ou un point) EmptyMer 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 Smile
tout à fait, je comprends bien Wink.
Mais pour le moment, j'essaie juste d'avoir un bon résultat Wink.

Ensuite, je referai tout ça, en gardant chaque code séparément, car ça peut être utile.
Revenir en haut Aller en bas
http://blendman.blogspot.com/
Invité
Invité




déplacer un objet vers un autre (ou un point) Empty
MessageSujet: Re: déplacer un objet vers un autre (ou un point)   déplacer un objet vers un autre (ou un point) EmptyMer 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 sweat )
Revenir en haut Aller en bas
D-z
Utilisateur confirmé: Rang *****
D-z


Messages : 1611
Localisation : Montpellier

déplacer un objet vers un autre (ou un point) Empty
MessageSujet: Re: déplacer un objet vers un autre (ou un point)   déplacer un objet vers un autre (ou un point) EmptyMer 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 Smile

_________________
 
Home is not a place, it's a feeling.
Revenir en haut Aller en bas
Contenu sponsorisé





déplacer un objet vers un autre (ou un point) Empty
MessageSujet: Re: déplacer un objet vers un autre (ou un point)   déplacer un objet vers un autre (ou un point) Empty

Revenir en haut Aller en bas
 
déplacer un objet vers un autre (ou un point)
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Problème avec un objet dirigé vers un autre avec image_angle
» déplacer vers un objet
» Déplacer un perso vers un objet par un click de souris
» Déplacer un objet d'une image a une autre
» arréter un objet en mouvement vers un point précis

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide débutants-
Sauter vers: