Bon en gros voilà, je veux faire un missile à tête chercheuse, qui lorsqu’il est est créé va suivre et prendre en chasse une cible.
De base j’utilise “Diriger vers ____ avec une force de longueur ____”, ce qui projette le missile vers la position initiale de l’objet à dégommer, MAIS l’objet étant en mouvement, s’il est trop loin, le projectile rate… Et ne suit pas !
Je voudrais que mon projectile suive la cible suivant une courbe, ce qui induirait j’imagine soit des calculs en math, soit la possibilité pour moi de mettre à jour tous les x centieme de seconde la direction de la force initiale…
Bref j’essaie d’expliquer simplement le truc mais c’est pas évidant, alors un dessin vaut mieux qu’un discours :
Oubliez la légende, c’est juste pour illustrer en gros la trajectoire que je voudrais donner à mon missile.
Merci d’avance.
EDIT : bon j’ai bien essayer de faire qqch du genre “Tant que l’objet ennemi existe” Alors “Diriger vers ennemi avec une force” et “tourner en direction de l’ennemi”, mais comme je m’en doutais instant crash… (j’imagine que les objets cibles doivent être instanciés …)
Ce serait plutôt :
Pour chaque objet missile : diriger missile vers le joueur.
A prendre en compte, la force de déplacement, qui peut être trop grande pour que le missile réajuste sa trajectoire.
On se retrouve alors avec un missile qui tourne autour de sa cible sans jamais s’en rapprocher.
Il faudra donc augmenter la force de déplacement de temps à autre, notamment pour les virages.
Dans mon cas c’est pas le joueur c’est l’ennemi qui se déplace et qui doit etre suivi par un missile, j’arrive sans problème à tirer droit avec “diriger vers” sur un ennemi (avec ce qu’on pourrait appeler un tir laser), mais là ce que je veux c’est qqch qui ne part droit(comme sur l’illustration plus haut) et qui se dirige vers la cible (et en + en prédisant la trajectoire d’interception) !
Des maths quoi, et surtout comment le schématiser dans les events et conditions, je me rends compte qu’au fur et à mesure que je complexifie mes events j’ai des bizarreries je pense encore zapper un truc… Personne n’a jamais fait d’exemple de ce genre de chose ?
Pour ton Tant Que, c’est normal que ça plante, tu executes l’action tant que l’ennemi existe : résultat, si tu ne supprimes pas l’objet dans les actions de l’événement, cela va boucler à l’infini et freezer le logiciel.
Si c’est ça, vérifie en effet ton évènement Tant Que, je pense que t’a n’a pas à l’utiliser dans ce cas donc il faut repenser tes évènements. N’hésite pas à relire la page qui explique 2/3 concepts sur les évènements : wiki.compilgames.net/doku.php/ga … s_concepts
On a pourtant même mis un message si jamais tu fais n’importe quoi avec les Tant Que, au bout de 100000 itérations sans s’arrêter, ça te demande si par hasard t’aurai pas fait une bêtise et si tu veux arrêter l’aperçu
Mission impossible je comprends pas… le “missile” prend la direction de l’objet visé à un instant T, mais pas moyen de “tracé” la position de ce même objet qui est soumis à une force… En gros le missile continu sur son en angle initial, il se fiche completement des poisition X() et Y() de l’objet ciblé alors qu’il devrait actualiser ça… 60 fois par seconde ?
J’ai vraiment besoin d’un exemple pour ça ! Je vous promet un chouette résultat à quiquonque peut me filer un coup de main !
Attention à la valeur de l’attenuation de ta force : Si tu met 1, elle sera perpetuelle jusqu’à ce que tu stoppe l’objet.
Je pense que c’est ce que tu fais actuellement, tu créé le missile et hop tu lui dit d’aller vers la position du missile.
Sauf que le missile il bouge, et donc cette position n’est plus bonne. Il faut donc bouger légèrement le missile à chaque execution des évènements :
Condition : Aucune
Action : Ajouter une force à missile vers Cible.X();Cible.Y() avec une attenuation de 0
L’attenuation de 0 permet de donner une mini impulsion qui dure juste l’instant du rendu de l’image, donc tu peux ajouter en continue la force. Avec 1, la force aurait été permanente.
J’avoue que la subtilité est pas facile à appréhender, je crois que c’est vite expliqué dans la page “Concepts” du wiki…
Mais ce que tu veux faire est pourtant facilement faisable ne t’inquiète pas. (Il doit y avoir des jeux d’exemple où les objets sont dirigés vers un autre d’ailleurs).
Bon bin c’est *** comme la lune à condition d’utiliser les bonnes forces/conditions, j’avais fait des tests mais en cherchant midi à 14h, avec un peu de pratique ça va tout seul…
Je passe le sujet en résolu.
Voilà la solution :
Je laisse l’amortissement à 0, j’ai bon ?
PS : j’adorerais avoir un uploader d’image/fichier pour attacher des pièces jointes aux posts ! En hébergeant sur des hébergeurs externes on peut être sûr que le jour où qqn tombe sur cette solution sur le forum les liens images/fichiers seront morts…
Dans un “Pour chaque objet Canon” je dois mettre l’amortissement à 1 sinon le missile ne bouge pas après avoir été spawné… Mais en plus de ne pas bouger, il ne fait plus son taf !
J’ai repassé le topic en actif (j’ai viré [résolu]).
Pour une seule cible, c’est simple, il suffit de diriger chaque missile vers la cible habituellement :
Condition : Aucune
Action : Ajouter une force à missile vers Cible.X();Cible.Y() avec une attenuation de 0
Pour plusieurs missiles, ça ne change rien, car l’action est déjà répetée pour chaque missile automatiquement par GD.
Pour plusieurs missiles et plusieurs cibles, là par contre c’est plus complexe. GD n’a aucune idée de quelle cible il faut prendre quand tu marque Cible.X();Cible.Y(). (Et donc il prend le premier objet “Cible” en mémoire, donc tous les missiles iront au même endroit)
La solution est d’une part d’utiliser un évènement “pour chaque objet Missile” : ensuite, rajouter dans l’évènement une condition qui permette de filtrer les objets cible pour ne garder que celle à viser.
Une solution est à la création du missile, de lui mettre une variable “CibleIdentifieur” qui a la même valeur que la variable “Identifieur” de la cible à viser (ça implique donc que chaque cible créé ait une variable “Identifieur” différente).
Par exemple :
Condition : Aucune
Action : Choisir une cible au hasard
Créer l'objet Missile à la position ...
Faire =Cible.Variable(Identifieur) à la valeur de la variable CibleIdentifieur de Missile
Comme ça, on chaque missile connait sa cible.
Il ne reste plus qu’à faire le “Pour chaque objet” :
Pour chaque objet missile:
Conditions : La variable Identifieur de Cible est = à Missile.Variable(CibleIdentifieur)
Actions : Ajouter une force à missile vers Cible.X();Cible.Y() avec une attenuation de 0
Oui c’est le principe : une variable qui s’incrémente ou aléatoire.
Tu as aussi l’extension Objet Liés qui est fait pour ça : A la création, tu lie (virtuellement) deux objets avec l’action de l’extension, et ensuite tu a une condition qui, étant donné un objet, te selectionne l’objet lié à celui ci.
C’est le même principe que les variables : pouvoir identifier chaque objet et en retrouver un à partir d’un autre.
Hum je vais creuser… Idéalement déjà pour mes canons/projectiles j’aimerais une espece de classe/modele à instancier en fonction de futurs choix, j’ai une structure fonctionnelle pour les tirs “simples”, mais pas pour les projectiles plus physiques… Missiles tête chercheuse, mines, leurres, bref… Tout l’attirail !