Bonjour !
Je voulais savoir s’il était possible de donner à un objet un trajectoire circulaire autour d’un point ou s’il était possible de lui faire suivre une ligne préalablement tracée.
Merci d’avance pour vos réponses.
Salut
Tout est possible avec les trajectoires…
Pour une trajectoire predefinie, je suppose qu’il faut redefinir la position de l’objet en temps réél. Je m’explique :
' Position 0;0 pour Objet
Au lancement de la scene => 0 -> X(Objet)
Au lancement de la scene => 0 -> Y(Objet)
' Faire avancer X de 1 à chaque boucle
Toujours => X(Objet)+1 -> X(Objet)
' En fonction de la position X de l'objet, redefinir la position Y
[X(Objet)>=10] [b]et[/b] [X(Objet)<30] => Y(Objet)+1 -> Y(Objet)
[X(Objet)>=30] [b]et[/b] [X(Objet)<60] => Y(Objet)-1 -> Y(Objet)
' Etc.
Ou bien inversement, faire dependre la position X de la position Y…
Tu peux même combiner les deux, ou integrer des fonctions plus complexes pour obtenir d’autres types de trajectoire que celle-ci.
Tu peux aussi integrer une autre variable qui fera office de facteur acceleration.
Pour une trajectoire circulaire, il faut reviser sa trigonometrie
' Créons une variable globale A=0
Au lancement de la scene => 0 -> A
' Augmenter la variable a de 0.1 (Plus si tu veux que ça tourne plus vite)
Toujours => A+0.1 -> A
' Nommons XCentre la position X de l'objet autour duquel tu veux tourner
' Nommons YCentre la postion Y du même objet
' Enfin, nommons Rayon le rayon souhaité du cercle
Toujours => XCentre + Rayon * cos A -> Position X de l'objet
Toujours => YCentre + Rayon * sin A -> Position Y de l'objet
L’objet ainsi créé tournera autour du point de coordonnée XCentre;YCentre a une distance de Rayon
Concretement, cela donne dans Game Develop :
Au lancement de la scène => Faire =0 à la variable globale A
Toujours => Faire +0.1 à la variable globale A
Toujours => Faire =400+10cosGBL(A[]) à la position X de l'objet Orbite
Toujours => Faire =300+10sinGBL(A[]) à la position Y de l'objet Orbite
Ici, l’objet Orbite tournera à une distance de 10px du point de coordonnée 400;300 (Le centre de l’ecran si tu as laissé le jeu en 800x600). Pour le faire tourner plus vite, il faudra faire augmenter la variable globale A plus vite tout en gardant a l’esprit que si A augmente trop vite, l’objet saccadera et le mouvement ne sera pas fluide, et inversement, faire augmenter la variable globale A moins vite permettra de ralentir la rotation et de fluidifier le mouvement.
J’ai essayé avec la trigonométrie. J’ai placé des points qui avançaient selon les axes x et y et j’ai essayé d’engendrer une rotation à partir de ceux-ci, mais étant débutant, je me suis heurté à quelques difficultés.
Je vous remercie donc pour votre explication et j’en attends la fin avec impatience !
Et voici pour la fin des explications
Il ne manquait pas grand chose, mais suffisament pour ne rien comprendre
J’ai aussi réécrit dans la dernière ligne de code ce qui doit apparaitre concretement dans Game Develop.
Si malgrès cela, tu n’arrive toujours pas à regler ton problème, je reste à ton entiere disposition
Voici un lien pour télécharger Orbite.jgd
Download
Ressource utilisée : Viseur.png
Si tu as installé le jeu ailleurs que dans le repertoire Program Files\Game Develop, supprime l’image Viseur.png à partir de Game Develop (L’image, pas l’objet !), recherche la, et rajoute la à la scène Nouvelle Scène 1. Elle se trouve dans le repertoire …\Game Develop\Exemples
Tu comprendra mieux avec cet exemple qu’en lisant des lignes de codes
J’éspère avoir pu t’aider…
De mon coté, j’ai fait un petit exemple : http://www.compilgames.net/dl/Rotation.zip
Tu le décompresse et tu l’ouvre avec Game Develop.
J’ai fait tourner une bille tout en la faisant avancer.
C’est vrai que pour le moment, c’est pas simple/évident de faire des trajectoires avec Game Develop.
Que vois je ?
Je crée un exemple, j’edite mon message pour y mettre le lien, et hop !
Deux exemples pour le prix d’un !
Au moins, tu es sûr d’y arriver
4ian, synchronisation parfaite
Par contre, la prochaine fois, enregistre ton exemple en version portable ( Fichier > Enregistrer en version portable ). Tu choisis un dossier, et Game Develop copie dedans tous les ressources ( images, sons, polices… ) nécessaire au jeu, et transforme les chemains globals ( C:…monImage ) en local ( monImage ).
Comme ça, n’importe qui pourra ouvrir ton exemple.
Merci beaucoup pour vos réponses !!!
Je vais me pencher dessus pour essayer de comprendre quand même les formules utilisées.
J’ai voulu créer au centre (400;300) un disque (j’ai pris l’image “Bille”). Mais j’ai l’impression que le logiciel définit comme centre un coin de l’image et non son centre, ce qui fait que le Viseur exécute bien une rotation, mais pas autour de la Bille.
4ian, merci pour l’astuce, j’y penserais la prochaine fois parce que sinon c’est galère lorsque l’on a pas installé le logiciel au même endroit ou que l’on utilise des ressources que l’autre n’a pas
Baldor, lorsque tu place une image, quelqu’elle soit, en un point de coordonée (X;Y) c’est par defaut le coin en haut à gauche de ton image que tu place en (X;Y).
C’est à toi de voir quelle taille fait l’image de ta bille, afin de recalculer les coordonées du centre de la bille.
Par exemple, une image de taille 50x50 placée en (400;300) ne sera pas au centre de ton ecran, il faudra la placer en (375;275) et prendre en compte le centre de ton mouvement de rotation en (400;300) pour faire tourner ton viseur autour de la bille
Inversement, si tu souhaite laisser ton image en (400;300), les coordonnées du centre de ta rotation devront être (425;325).
Après, pour connaitre la taille d’une image, sous Windows tu fait sur ton image : Clic-droit / Propriété / Résumé et tu aura la largeur et la hauteur de ton image en pixels.
Tu n’a plus qu’a sortir ta calculatrice ou un bout de papier
CQFD
C’est compris !
Merci !
Tu peut directement avoir la largeur et la hauteur d’un objet dans l’éditeur d’expressions.
Pour avoir le centre d’un object ( pour faire par exemple tourner un objet autour du centre d’un autre ), tu peut faire :
OBJ(MonObjet[x])+OBJ(MonObjet[largeur])/2
Ah oui, en effet, c’est plus général.
J’essaie aussi de créer un objet en rotation autour du premier objet en rotation mais le résultat est étrange.
Telecharge ceci :
rapidshare.com/files/215473529/Rotation.rar.html
Une rotation autour d’une autre rotation. Et dit moi si tu obtient quelque chose de similaire.
Merci beaucoup.
Je vais me coucher, je me pencherai dessus demain
Alors Baldor, on a plus de nouvelles, tu t’en sort ?
Désolé.
J’ai eu des dossiers d’inscription à faire à la dernière minute. Mais étant en Vacances, je vais m’y remettre.
Et encore une fois merci pour l’aide que vous m’apportez !
J’ai essayé votre méthode mais la boule secondaire ne tourne pas autour de la boule principale. Elle l’accompagne dans sa trajectoire mais reste toujours à la même position par rapport à elle (position où elle a été créée).
Tu positionne bien la seconde boule comme ceci :
cos(VAL(angle[])*100+OBJ(PremiereBoule[x])
?
En fait, j’ai ceci :
OBJ(Satellite principal[x])+15cosGBL(-Pie[])+OBJ(Satellite principal[largeur])/2
.