Game Maker forum
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le Deal du moment : -20%
-20% Récupérateur à eau mural 300 ...
Voir le deal
79 €

Un problème de vocabulaire pour discuter avec mon IA

2 participants

Aller en bas

Normal Un problème de vocabulaire pour discuter avec mon IA

Message par Getto Mar 7 Aoû 2018 - 22:44

Bonjour à tous illustres créateurs.

J'ai une difficulté que j'aimerais vous soumettre. 
Je fait un jeu vu du dessus orienté castagne un peu à la zelda minishcap mais j’espère pouvoir faire plus dynamique
 comme dans zelda, c'est de la 3d isométrique.

J'ai commencé à programmer des petits ennemis. Pour le moment ils me suivent jusqu’à m’atteindre mais lorsqu'ils sont plusieurs et si je les évite un moment, ils finissent par se superposer et se confondre.

J'aimerais qu'ils puissent s'entasser quelque part, se gêner les uns les autres, sans se superposer.
Seulement cela implique de pouvoir designer une instance parmi d'autres instances identiques 

Il faudrait que je puisse dire à mon ennemi: éloigne toi à une vitesse N de ton semblable le plus proche.


hors je ne sais pas comment dire cela sur Game Maker (la partie soulignée tout spécialement)
jusque là dans ce genre de cas de figure je faisais autant d'objet que j'avais besoin d'en appliquer à l’écran.
Je m'assurais ensuite que chacun de ses objets n'existe qu'en un seul exemplaire

ça donnais des trucs du genre;

 si le méchant n°1 est le plus proche et qu'il est à moins de N pixel alors...
si le méchant n°2 est le plus proche et qu'il est à moins de N pixel alors...
si le méchant n°3 est le plus proche et qu'il est à moins de N pixel alors...
si le méchant n°4 est le plus proche et qu'il est à moins de N pixel alors...


Mais cette fois j'aimerais faire les choses plus proprement 
J'ai lu qu'on pouvait gérer cela avec la fonction "with" mais je n'ai absolument rien pigé à l'utilisation qu'il convient d'en faire.

D'avance merci.


Dernière édition par Getto le Dim 12 Aoû 2018 - 11:10, édité 1 fois
Getto
Getto
Mini créator
Mini créator

Messages : 11

Revenir en haut Aller en bas

Normal Re: Un problème de vocabulaire pour discuter avec mon IA

Message par ElTriton Dim 12 Aoû 2018 - 9:34

Du coup ton problème c'est que tu as codé plusieurs ennemis différents mais qui ont le même comportement pour suivre ton personnage ? Du coup au bout d'un moment ils se rejoignent tous et c'est moche ?
Si c'est ça comment as-tu codé cette partie justement ? Tu utilises les "path" ou as-tu tout fait à la main ?

Quant aux instances tu voudrais pouvoir les répertorier c'est ça ? Pour pouvoir accéder à tes ennemis séparément ?

Enfin tes ennemis sont-il tous des instances du même objet ou as-tu créé plusieurs objets différents ?

Désolé de ne pas apporter de réponse, mais j'ai pas vraiment compris tes questions ^^'
ElTriton
ElTriton
Petit créateur
Petit créateur

Messages : 25
Pourcentage d'avancement : J'ai

http://infectedcoffeestudio.tumblr.com

Revenir en haut Aller en bas

Normal Re: Un problème de vocabulaire pour discuter avec mon IA

Message par Getto Dim 12 Aoû 2018 - 11:49

Bonjour ElTriton et merci de ta réponse

Mes ennemis sont des squelettes et je n'ai qu'un seul objet squelette.
Je voudrais justement garder un seul objet squelette.
(le fait qu'ils se superposent n'est pas seulement un problème esthétique ça ruine aussi le gameplay)

j'utilise la fonction path mais lorsque j'ajoute l'objet squelette aux obstacles ils se mettent à faire n'importe quoi ( je pense que du coup ils se considèrent eux même comme un obstacle ce qui les empêche de fonctionner)

Le petit bout de code en question:

if targeting=1
and stun=0
{

grid=mp_grid_create(0,0,room_width/32,room_height/32,32,32);
path=path_add();
mp_grid_add_instances(path,Orocher1,true);
mp_grid_add_instances(path,Orocher2,true);
mp_grid_add_instances(path,Orocher3,true);
mp_grid_add_instances(path,Oskeleton,true); ( cette ligne empêche le fonctionnement du path)

mp_grid_path(grid,path,x,y,Oheros1.x,Oheros1.y,true);
path_start(path,6,"",1);

}




il faudrait que je puisse dire en code " les autres instance de l'objet squelette sont des obstacles" 


je connais une solution à ce problème mais c'est du bricolage. Et puis ça implique d'avoir plein d'objets squelette.( ce que je veux éviter)

"Quant aux instances tu voudrais pouvoir les répertorier c'est ça ? Pour pouvoir accéder à tes ennemis séparément ?"


Oui je crois que c'est ça:
C'est une chose qui m'a souvent manqué dans mes jeux précédents, je ne sais pas comment m'adresser a une instance toute seule sans affecter le comportement des autres instance du même objet.

(je sais que l'on peut récupérer leur ID à gauche sous les layers pour celles qui sont déjà dans la room mais je voudrais pouvoir le faire aussi pour les instances qui sont créées en jeu)


je voudrais que mes ordres puissent dépendre de la situation par exemple ne donner un ordre qu'a l'instance la plus haute à l'ecran celle dont la variable Osef< aux autres variables Osef des autres instances du meme objet etc...


J’espère avoir été plus clair.


Merci du temps que tu m'accordes
Getto
Getto
Mini créator
Mini créator

Messages : 11

Revenir en haut Aller en bas

Normal Re: Un problème de vocabulaire pour discuter avec mon IA

Message par ElTriton Lun 13 Aoû 2018 - 7:19

Alors est-ce que tu as pensé à mettre certaines variables en aléatoire par exemple ? Genre la vitesse de déplacement de tes squelettes ? S'ils ne vont pas tous à la même vitesse ils ne devraient pas se rejoindre en principe. Ou même assigner leur destination dans une zone autour de ton personnage plutôt que son x,y parfait ? Tous n'iraient pas exactement au même endroit (certains le contourneraient d'autres pas...) et en plus pas à la même vitesse ?

Le code que tu as copié tu l'as mis où ?

Pour répertorier tes instances d'ennemis le plus simple je pense est de faire une boucle et de toutes les stockers dans une array du genre :
numberMax = instance_number(obj_ennemis);
var i;
for (i=0; i < numberMax; i++)
{ ennemis[i] = instance_find(obj_ennemis,i); }
Je ne sais pas si tu utilises déjà les arrays mais ça devrait marcher Smile
ElTriton
ElTriton
Petit créateur
Petit créateur

Messages : 25
Pourcentage d'avancement : J'ai

http://infectedcoffeestudio.tumblr.com

Revenir en haut Aller en bas

Normal Re: Un problème de vocabulaire pour discuter avec mon IA

Message par Getto Lun 13 Aoû 2018 - 9:41

Bonjour. Et merci de ta réponse.

Alors dans l'ordre

Oui j'ai pensé à leur donner des variables aléatoire mais ça ne correspond pas à ce que je veux faire. De plus ça ne les empêche pas de se passer au travers les uns les autres.

Pour ce qui est de leur faire viser un point proche du perso c'est prévu.
En fait je compte mettre des objets cibles invisibles tout autours de mon perso et faire en sorte que les ennemis visent seulement les cibles qui ne sont pas encore visées. De cette façon il essayeront d'encercler le joueur.

Le code que tu vois se trouve dans l'event step de mon objet squelette.

Sinon, tristement, non je ne connais pas les arrays je vais essayer de me renseigner 

En fait pour le moment je ne comprends pas grand chose au code que tu me proposes et du coup je ne sais pas encore comment l'utiliser.
je vais chercher je te tiens au courant.


Sinon quelqu'un saurait t'il comment transcrire la phrase suivante en code? ( c'est une chose qui me limite très très souvent)


Si tu est superposé à une instance de l'objet Ofleur alors prélève l'ID de cette instance.

j'imagine que ça devrait ressembler à 

if place_meeting(x,y,Ofleur)
{La je ne sais pas } 



Merci pour tout quoi qu'il en soit. C'est gentils d'avoir pris le temps de me répondre.
Getto
Getto
Mini créator
Mini créator

Messages : 11

Revenir en haut Aller en bas

Normal Re: Un problème de vocabulaire pour discuter avec mon IA

Message par ElTriton Lun 13 Aoû 2018 - 10:34

En fait si le code que tu as collé est dans ton objet step il est possible que ce ne soit pas complètement optimisé... Tu n'as pas besoin de créer une mp_grid à chaque step, une seule fois devrait suffire (par exemple en la stockant dans une variable globale type global.ennemiGrid = ds_gris_create(...) ).
Et si tes objets à éviter (orocher) ne bougent pas tu peux les définir également une seule fois plutôt qu'à chaque fois. Parce que là j'ai l'impression qu'à chaque step, chacune de tes instances d'ennemis crée une grid et la met à jour avec les objets à éviter. Ca fait beaucoup 60 fois par seconde.
Essaye peut-être de créer un objet séparé qui ne sert qu'à gérer ta grid et les instances à éviter ?
Essaye par exemple de mettre dans son "Create Event" :
global.grid=mp_grid_create(0,0,room_width/32,room_height/32,32,32);
mp_grid_add_instances(global.grid,Orocher1,true);
mp_grid_add_instances(global.grid,Orocher2,true);
mp_grid_add_instances(global.grid,Orocher3,true);


Et dans son step event :
mp_grid_add_instances(global.grid,Oskeleton,true);



Ensuite dans ton objet ennemi tu mets ça dans son create event :
path=path_add();

Et dans le step :
if (mp_grid_path(global.grid,path,x,y,Oheros1.x,Oheros1.y,true))
{ path_start(path,6,"",1); }



Je ne suis pas un expert en path mais peut-être qu'en ne définissant qu'une seule fois par step les obstacles et en faisant fonctionner tous tes ennemis sur la même grid cela fonctionnera mieux et sera plus fluide ?


Les arrays fonctionnent de la même manière que les variables mais peuvent contenir plusieurs données que tu vas ensuite chercher avec leurs coordonnées comme si tu allais chercher des choses dans un tableau.
C'est hyper pratique pour stocker par exemple toutes les instances d'un objet ou même du dialogue, etc...
https://docs.yoyogames.com/source/dadiospice/002_reference/001_gml%20language%20overview/401_06_arrays.html



Du coup le code que je t'ai donné te permet de faire une boucle avec le terme "for" qui permet de donner une condition de départ (ici i=0), une condition de fin (ici tant que i est plus petit que le nombre d'instance de ton objet ennemi la boucle continue de tourner) et une condition qui arrive à chaque fin de boucle (ici i +=1). Et à chaque boucle une nouvelle instance de ton objet ennemi est stockée dans une array.
Comme ça si jamais tu veux modifier une seule instance tu peux faire un truc du genre 
with(ennemis[2]) { quelque chose à faire }
Et seulement l'instance correspondant à ennemis[2] bougera, les autres ne seront pas affectées.


Je ne sais pas si je suis très clair ^^' mais dans tous les cas je pense que c'est la solution la plus simple pour éviter le bricolage et ne ferait que compliquer le tout.
Il y a plusieurs types de boucles mais le "for" est un des plus utiles je trouve :
https://docs.yoyogames.com/source/dadiospice/002_reference/001_gml%20language%20overview/401_11_for.html



Et ce que tu veux transcrire en code se fait comme ça (enfin je crois) :
if (place_meeting(x,y,Ofleur))
{ fleur = instance_place(x,y,Ofleur); }
La variable fleur contiendra l'ID de l'instance d'Ofleur superposant celui qui lance le code. Smile
ElTriton
ElTriton
Petit créateur
Petit créateur

Messages : 25
Pourcentage d'avancement : J'ai

http://infectedcoffeestudio.tumblr.com

Revenir en haut Aller en bas

Normal Re: Un problème de vocabulaire pour discuter avec mon IA

Message par Getto Lun 13 Aoû 2018 - 11:13

Oh la vache!!!
P***** merci!

Je suis partagé entre la reconnaissance et l’embarras!

C'est super sympas de me détailler tout ça j'imaginais pas que tu te casserais autant l' *** je veux dire la tête pour m'expliquer tout ça.

Step:

{ sprite_index=Merci 

sprite_index= semetàgenoux}

repeat;
Getto
Getto
Mini créator
Mini créator

Messages : 11

Revenir en haut Aller en bas

Normal Re: Un problème de vocabulaire pour discuter avec mon IA

Message par ElTriton Lun 13 Aoû 2018 - 12:40

Héhé, me remercie pas tout de suite, c'est pas dit que tout ça fonctionne ^^'
Tiens-moi au courant d'ailleurs !

Et si t'as d'autres questions ou que tu veux en savoir plus sur certains trucs, hésite pas à les poser là Smile

Bon courage !
ElTriton
ElTriton
Petit créateur
Petit créateur

Messages : 25
Pourcentage d'avancement : J'ai

http://infectedcoffeestudio.tumblr.com

Revenir en haut Aller en bas

Normal Re: Un problème de vocabulaire pour discuter avec mon IA

Message par Getto Mer 15 Aoû 2018 - 19:56

Re El triton

J'ai essayé nombre de choses sans succès
Les arrays c'est encore un peu compliqué pour moi et je n'arrive pas encore à m'en servir comme je le voudrais mais j'apprends petit à petit. 

Ton commentaire m'a tout de même permis de régler mon problème.
j'ai collé un objet tiers à chacun de mes squelettes qui reconnait son squelette et que son squelette reconnait.
l'objet sert de "bumper" en quelque sorte qui repousse les autres squelettes du coup je peux maintenant fuir des hordes de squelettes qui ne se superposent plus

Pour l'optimisation en utilisant une grille commune j'ai rencontré plusieurs problèmes d'abord j'ai besoin que la grille soit mise à jour a chaque step (plusieurs obstacles bougent et la view également suit le joueur) et  j'ai donc pensé la placer dans mon Objet joueur. Mes tentatives n'ont pas fonctionné pour le moment mais je ne peux pas affirmer que ça ne va pas marcher à terme, en effet je fais couramment beaucoup d'erreurs que je corrige petit à petit et ces outils la sont encore nouveaux pour moi.

Je te renouvelle mes remerciements, j'ai un long travail devant moi pour utiliser convenablement tous ces nouveaux outils.
Getto
Getto
Mini créator
Mini créator

Messages : 11

Revenir en haut Aller en bas

Normal Re: Un problème de vocabulaire pour discuter avec mon IA

Message par ElTriton Jeu 16 Aoû 2018 - 7:03

Arf !
Pour les arrays ça peut paraître un peu compliqué au début mais quand tu comprends bien ça sauve la vie !
Tout mon système de dialogue est basé sur des arrays à deux dimensions, et mes stats de RPG sur des arrays à une dimension. Ca permet de gagner tellement de temps !
Pour les boucles c'est un peu pareil, ça fait partie des bases qui permettent tellement de choses une fois qu'on a compris comment elles fonctionnent.
Je ne sais pas si tu as testé la parenté entre objet également ? Ca peut t'aider pour certaines choses.

Si jamais tu as besoin d'éclaircissement ou que tu as des choses que tu ne comprends pas encore parmi ces concepts hésite pas à demander !

C'est cool si tu as réussi à régler ton problème quand même !
Tu as créé un objet qui agît comme une zone de collision ne laissant pas passer les autres ennemis mais ne réagit pas à celui auquel il est lié c'est ça ?
Comment cela fonctionne-t-il avec le path ?

Pour l'optimisation tu peux effectivement le mettre à jour à chaque step, c'est pas un problème. Le seul problème que je voyais à ton ancienne solution c'est que tu créais autant de grid que d'ennemis, et ça à chaque step !
Du coup en créant ta grid une seule fois dans le Create de ton objet joueur par exemple et en plaçant les instances d'objets à éviter qui ne bougent pas (tes rochers par exemple ?) et en actualisant une seule fois par step (dans un begin step par exemple) les instances qui bougent (tes ennemis, ton joueur, des portes qui peuvent s'ouvrir...). Que la view suive le joueur cela n'a pas d'importance si ta grid couvre l'intégralité de ta room ça fonctionnera !
Tu auras donc une seule grid contenue dans une variable globale mais un path par ennemi qui suivra son propre chemin au sein de cette grid générale Smile
ElTriton
ElTriton
Petit créateur
Petit créateur

Messages : 25
Pourcentage d'avancement : J'ai

http://infectedcoffeestudio.tumblr.com

Revenir en haut Aller en bas

Normal Re: Un problème de vocabulaire pour discuter avec mon IA

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum