Se connecter

Informatique

Création de Jeux

Sujet : J'aide les personne dans Game maker
Shadowaves
Niveau 5
19 mars 2018 à 09:16:47

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 :hum: )

JambonBeurreMan
Niveau 5
19 mars 2018 à 10:48:13

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 :hum: )

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. :merci:

Shadowaves
Niveau 5
19 mars 2018 à 11:54:33

Bon ben du coup j'ai eu l'occaz' de faire quelques tests et mea culpa mais y avait rien qui fonctionnait :sarcastic: 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 :p) ) 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 :rire:

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à :p) J'espère que ça va t'aider :)

JambonBeurreMan
Niveau 5
19 mars 2018 à 12:52:22

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 :ange:

Shadowaves
Niveau 5
19 mars 2018 à 13:13:47

Pas de soucis :ok:

JambonBeurreMan
Niveau 5
19 mars 2018 à 13:27:39

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

Shadowaves
Niveau 5
19 mars 2018 à 13:33:23

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...)

JambonBeurreMan
Niveau 5
19 mars 2018 à 13:45:03

Ok les tirs sont orientés vers le joueur. Mais bizarre que chaque ennemi ne tire qu'un projectile.
https://www.noelshack.com/2018-12-1-1521463437-capture2.jpg https://www.noelshack.com/2018-12-1-1521463453-capture2-screenshot.jpg

Shadowaves
Niveau 5
19 mars 2018 à 13:48:53

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 :p) Tente de mettre genre entre 5 et 10 et regarde ce que ça donne :ok:

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)

JambonBeurreMan
Niveau 5
19 mars 2018 à 13:53:47

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

Shadowaves
Niveau 5
19 mars 2018 à 13:57:05

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é

Shadowaves
Niveau 5
19 mars 2018 à 14:05:50

sachant qu'avec cette méthode, il te suffira de réduire l'angle pour réduire l'amplitude du spread

JambonBeurreMan
Niveau 5
19 mars 2018 à 14:11:42

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

Shadowaves
Niveau 5
19 mars 2018 à 14:17:10

Aaah oui je vois :hap:

A la rigueur, pour palier à ça tu peux toujours mettre un Set Instance Scale x : 1 y : -1 :p)
edit : Sur les bullets bien sûr :oui:

JambonBeurreMan
Niveau 5
19 mars 2018 à 14:21:25

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.

Shadowaves
Niveau 5
19 mars 2018 à 14:33:59

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

EnculeAd--n
Niveau 5
11 mai 2018 à 19:54:48

Ta encore du monde:question:

spidey15
Niveau 11
12 mai 2018 à 01:32:37

https://image.noelshack.com/fichiers/2017/02/1484404938-bloggif-587a37f57ed2d.png

lemuass
Niveau 2
21 février 2019 à 23:08:55

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: https://www.noelshack.com/2019-08-4-1550786908-gm.png
(le sprite possède une animation)
merci d'avance pour vos réponses

chopsueys
Niveau 16
22 février 2019 à 01:55:03

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: https://www.noelshack.com/2019-08-4-1550786908-gm.png
(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

Sujet : J'aide les personne dans Game maker
   Retour haut de page
Consulter la version web de cette page