Le D'n'P te limite énormément, mais je pense avoir trouvé quelque chose; ça garde le DnP mais tu auras quand même un peu de code dans les values, sachant qu'avec ce que tu souhaite faire, je vois pas comment t'en sortir sans un peu de trigo, bref voilà ce que je te propose d'essayer :
Pour le cas 2, spread vers le joueur :
Admettons que le speed de ta room est réglé à 60.
Sur la "tourelle" :
Create -> Alarm Set 0 (peu importe le chiffre) -> Step : 180 (ça tireras donc toutes les 3 secondes)
Alarm 0 : Create Object instance -> "objet tir" ->
x : lengthdir_x("la distance entre la tourelle et l'objet tiré", point_direction("tourelle".x, "tourelle".y, "objet joueur".x, "objet joueur".y))
y : lengthdir_y("la distance entre la tourelle et l'objet tiré", point_direction("tourelle".x, "tourelle".y, "objet joueur".x, "objet joueur".y))
Le reste tu connais.
Create Object instance -> "objet tir" ->
x : lengthdir_x("la distance entre la tourelle et l'objet tiré", point_direction("tourelle".x, "tourelle".y, "objet joueur".x, "objet joueur".y)+5)
y : lengthdir_y("la distance entre la tourelle et l'objet tiré", point_direction("tourelle".x, "tourelle".y, "objet joueur".x, "objet joueur".y)+5)
Le reste tu connais.
Create Object instance -> "objet tir" ->
x : lengthdir_x("la distance entre la tourelle et l'objet tiré", point_direction("tourelle".x, "tourelle".y, "objet joueur".x, "objet joueur".y)-5)
y : lengthdir_y("la distance entre la tourelle et l'objet tiré", point_direction("tourelle".x, "tourelle".y, "objet joueur".x, "objet joueur".y)-5)
Le reste tu connais.
Ca devrait donc tirer trois objets, avec un angle de 5 d'écart entre les 3 par rapport à la tourelle.
Alarm Set "le même chiffre que tu as choisi, pour reboot l'alarme en fait" -> step : 180
Et tu n'as plus qu'à mettre sur les "objets tirés" un Create contenant un Set Point Direction avec les coordonnées de l' "objet joueur" et un Set speed à la vitesse voulu et ça devrait fonctionner (btw je peux pas tester, j'ai pas accès à GM en ce moment )
Le 19 mars 2018 à 09:16:47 Shadowaves a écrit :
Le D'n'P te limite énormément, mais je pense avoir trouvé quelque chose; ça garde le DnP mais tu auras quand même un peu de code dans les values, sachant qu'avec ce que tu souhaite faire, je vois pas comment t'en sortir sans un peu de trigo, bref voilà ce que je te propose d'essayer :Pour le cas 2, spread vers le joueur :
Admettons que le speed de ta room est réglé à 60.
Sur la "tourelle" :
Create -> Alarm Set 0 (peu importe le chiffre) -> Step : 180 (ça tireras donc toutes les 3 secondes)
Alarm 0 : Create Object instance -> "objet tir" ->
x : lengthdir_x("la distance entre la tourelle et l'objet tiré", point_direction("tourelle".x, "tourelle".y, "objet joueur".x, "objet joueur".y))
y : lengthdir_y("la distance entre la tourelle et l'objet tiré", point_direction("tourelle".x, "tourelle".y, "objet joueur".x, "objet joueur".y))
Le reste tu connais.Create Object instance -> "objet tir" ->
x : lengthdir_x("la distance entre la tourelle et l'objet tiré", point_direction("tourelle".x, "tourelle".y, "objet joueur".x, "objet joueur".y)+5)
y : lengthdir_y("la distance entre la tourelle et l'objet tiré", point_direction("tourelle".x, "tourelle".y, "objet joueur".x, "objet joueur".y)+5)
Le reste tu connais.Create Object instance -> "objet tir" ->
x : lengthdir_x("la distance entre la tourelle et l'objet tiré", point_direction("tourelle".x, "tourelle".y, "objet joueur".x, "objet joueur".y)-5)
y : lengthdir_y("la distance entre la tourelle et l'objet tiré", point_direction("tourelle".x, "tourelle".y, "objet joueur".x, "objet joueur".y)-5)
Le reste tu connais.Ca devrait donc tirer trois objets, avec un angle de 5 d'écart entre les 3 par rapport à la tourelle.
Alarm Set "le même chiffre que tu as choisi, pour reboot l'alarme en fait" -> step : 180
Et tu n'as plus qu'à mettre sur les "objets tirés" un Create contenant un Set Point Direction avec les coordonnées de l' "objet joueur" et un Set speed à la vitesse voulu et ça devrait fonctionner (btw je peux pas tester, j'ai pas accès à GM en ce moment )
Wouah. Je vais essayer ça dès que possible et je te tiens au courant des éventuelles difficultés.
Merci infiniment pour l'aide apportée.
Bon ben du coup j'ai eu l'occaz' de faire quelques tests et mea culpa mais y avait rien qui fonctionnait MAIS du coup j'ai trouvé le moyen de tout faire fonctionner alors, ne pouvant pas éditer mon message, je te passe le tout ici (fonctionnel cette fois ) et en plus optimisé aussi
Du coup, dans la tourelle (et toujours en partant du principe que le room_speed est à 60)
Create -> Alarm Set "Numéro de l'alarme" step : 180 (toutes les 3 secondes)
Alarm "Numéro choisi" -> Assign Variable -> Elle stockera l'angle donc appelons là "var_angle" -> Value : point_direction(Tourelle.x, Tourelle.y, player.x, player.y
Ensuite Create Object Instance -> "Objet tiré", appelons-le "bullet" ->
x : x + lengthdir_x("distance entre la tourelle et le bullet à créer", var_angle)
y : y + lengthdir_y("distance entre la tourelle et le bullet à créer", var_angle)
Tu connais le reste.
Ca créeras un bullet à la distance définie entre les guillemets au pixel près entre la tourelle et le player, si tu veux rajouter d'autres bullets, tu as juste à faire un autre Create Object Instance avec le même code mais varier l'angle à la fin des lignes de coordonnées, par exemple :
x : x + lengthdir_x("distance entre la tourelle et le bullet à créer", var_angle+5)
y: y + lengthdir_y("distance entre la tourelle et le bullet à créer", var_angle+5)
Enfin, ne pas oublier à la fin le Alarm Set "num choisi" step : 180, pour faire reboucler l'event, libre à toi de rajouter des valeurs pour l'empêcher de loop par la suite
Et enfin le dernier problème auquel je n'avais pas pensé se trouve dans la trajectoire des bullets, ils vont vers le joueur, hors, si j'ai bien compris tu veux un spread qui.. ben qui spread quoi, pas qui sont à tête chercheuses
Du coup la soluce que j'ai trouvé c'est :
Dans l'objet bullet :
Dans le Create : Set Point Direction (dans le DnD) ->
x : instance_nearest(x, y, Tourelle)
y : instance_nearest(x, y, Tourelle)
Et pour finir, tu met un Set Speed à la vitesse que tu veux MAIS en négatif, vu que c'est précis, ça va avancer vers la tourelle, mais à l'envers, ce faisant ça s'éloignera de la tourelle et ça donne un relativement bon spread je trouve, libres à d'autres de trouver d'autres solutions
Voiiilà J'espère que ça va t'aider
Dans mes précédentes tentatives, j'avais également le problème des projectiles à têtes chercheuses XD
Du coup ça pourrait faire une bonne variante :p
Si j'ai encore besoin d'aide, je reviendrai très certainement vers ce topic.
Encore une fois, merci beaucoup Shadowaves pour l'aide apportée
Pas de soucis
Les tourelles tirent, du coups c'est plus propre que de mettre un Cooldown dans un event Step
Deux petits (gros) problèmes cependant :
- Les tourelles ne visent pas le joueurs
- J'ai beau créer plusieurs instances Bullet avec un angle différent dans l'event Alarm, il n'y a qu'un projectile
Pour les tourelles, dans l'event Step (ou un event avc une hitbox par exemple), mettre un petit Set Direction x : joueur.x et y joueur.y, je pense que ça fera le café, par contre pour les bullets c'est bizarre, chez moi il y en a bien plusieurs qui apparaissent
Tu as essayé de mettre un chiffre assez grand pour voir ? Sans oublier qu'il faut pas mélanger les signes et/ou les chiffres, sur le même bullet (si tu met +5 au x, il faut mettre +5 au y, etc...)
Ok les tirs sont orientés vers le joueur. Mais bizarre que chaque ennemi ne tire qu'un projectile.
Je viens de comprendre, c'est à cause que tu as initialisé la distance du projectile à 0, sur un cercle de diamètre 0, tous les points partent du même endroit Tente de mettre genre entre 5 et 10 et regarde ce que ça donne
edit : Dans le doute de parle de ces variables :
x : x + lengthdir_x("distance entre la tourelle et le bullet à créer", var_angle+5)
y: y + lengthdir_y("distance entre la tourelle et le bullet à créer", var_angle+5)
Alors les instances sont bien créées mais elle ne sont pas déviées. Je pense savoir pourquoi.
Dans obj_enemy_bullet, j'ai mis le Set Direction obj_player.x et obj_player.y dans l'event Create donc je pense que toutes les instances obj_enemy_bullet sont systématiquement orientées vers le joueurs, inhibant le var_angle je suppose.
Edit: J'ai testé ta solution, le problème persiste donc il est probable que ça vienne de obj_enemy_bullet>event Create>Set Direction
Oui c'est à cause de ça, comme je t'ai dit, tente de mettre dans le Set Direction x : instance_nearest(x, y, "nom de ta tourelle")
y : instance_nearest(x, y, "nom de ta tourelle"), et le Set Speed tu le passe au négatif, perso ça avait fonctionné
sachant qu'avec cette méthode, il te suffira de réduire l'angle pour réduire l'amplitude du spread
Le 19 mars 2018 à 13:57:05 Shadowaves a écrit :
Oui c'est à cause de ça, comme je t'ai dit, tente de mettre dans le Set Direction x : instance_nearest(x, y, "nom de ta tourelle")
y : instance_nearest(x, y, "nom de ta tourelle"), et le Set Speed tu le passe au négatif, perso ça avait fonctionné
Non, cela me rajoute au contraire deux problèmes :
- Les tirs ne sont plus orientés vers le joueurs
- En mettant un speed négatif, les projectiles "reculent", ça n'est pas un problème si le sprite est symétrique, mais dans le cas où il ne l'est pas, ça le fait pas :p
Aaah oui je vois
A la rigueur, pour palier à ça tu peux toujours mettre un Set Instance Scale x : 1 y : -1
edit : Sur les bullets bien sûr
Sinon l'idée serait de modifier le set_point_direction du projectile avant la création d'une instance du projectile, mais il faudrait pouvoir le modifier au sein de obj_enemy. Mais est ce que c'est faisable ?
J'avais essayé de le faire, mais à chaque fois que de nouvelles instances de projectiles sont créées, elles sont comme aimantées/attirées vers le joueur.
A partir du moment où tu initialises le point_direction avec le joueur, c'est normal qu'elles aillent vers lui, pour moi, comme je t'ai dit, la meilleure option consiste à les faire "reculer" à partir de la tourelle et retourner le sprite, sinon il faudra que tu codes milles et une condition pour que le bullet n°x aille à un certain degré et pas les autres
Ta encore du monde:question:
Hello, je sais que ça fait longtemps que personne a écrit dans ce salon, mais j'ai quand même de l'espoir en y écrivant.
Mon problème est vraiment ultra basique, soyez indulgents c'est la première fois que je touche à game maker.
En gros j'ai créé un objet avec plusieurs animations possibles, qui fonctionnent car l'objet change de sprite en appuyant sur certaines touches. Le souci, c'est que l'animation se lance pas pendant que le personnage bouge, mais pendant que celui-ci est immobile.
J'avoue c'est con comme problème mais ça va faire 30 min que je bidouille comme je peux et que rien ne marche.
en gros voilà un de mes blocs:
(le sprite possède une animation)
merci d'avance pour vos réponses
Le 21 février 2019 à 23:08:55 lemuass a écrit :
Hello, je sais que ça fait longtemps que personne a écrit dans ce salon, mais j'ai quand même de l'espoir en y écrivant.
Mon problème est vraiment ultra basique, soyez indulgents c'est la première fois que je touche à game maker.
En gros j'ai créé un objet avec plusieurs animations possibles, qui fonctionnent car l'objet change de sprite en appuyant sur certaines touches. Le souci, c'est que l'animation se lance pas pendant que le personnage bouge, mais pendant que celui-ci est immobile.
J'avoue c'est con comme problème mais ça va faire 30 min que je bidouille comme je peux et que rien ne marche.
en gros voilà un de mes blocs:
(le sprite possède une animation)
merci d'avance pour vos réponses
Salut, alors ça fait plusieurs années que je n'utilise plus GM je suis vraiment rouillé mais je pense comprendre ton problème.
Hors sujet mais je te conseil vivement de te passer le plus tôt possible du système de drag and drop et de te pencher sur le langage gml sinon tu risques de perdre du temps et de galérer très souvent.. puis tes jeux seront vraiment très basiques.
Pour ton problème je pense qu'il s'agit de ton évènement left qui est inapproprié pour le changement de sprite avec cette action.
En gros l’évènement left au contraire de left pressed et left release est un évènement continue (non ponctuel) et donc à chaque frame (step) du jeu le programme redonne l'ordre de changer le sprite tant que la touche est enfoncé. En ordonnant le changement de sprite avec cette action l'index de l'animation est réinitialisé au début et donc bloque en boucle puis ne se lance réellement que lorsque tu lâches la touche.
En gml ce serait bien plus pratique mais voilà ce que tu peux faire.
Il te suffit de déplacer ton changement de sprite dans des évènements "pressed" appropriés et de laisser le déplacement là où il est..
En vrais c'est pas vraiment comme ça qu'il faudrait s'y prendre mais chaque choses en son temps.. et puis je ne sais pas comment est faite ton animation quel type de jeu c'est etc..
Si tu as des questions sur le gml.. le fonctionnement des variable etc.. tu peux me mp