| Différencier deux mêmes objets | |
|
+4Térence Asu glcraft loic01222 8 participants |
Auteur | Message |
---|
loic01222 Plutôt bien
Messages : 49
| Sujet: Différencier deux mêmes objets Ven 16 Mai 2014 - 23:21 | |
| Bonjour !
Je ne sais pas si la réponse à ma question est toute bête ou si c'est pas de mon niveau, mais j'ai un objet ennemi qui, quand il est créé, crée un objet de "vision" (un triangle qui part de ses yeux et qui va devant lui), et ce triangle le suit, et se tourne en même temps que lui. Le problème, c'est que comme je voudrais créer plusieurs de ces ennemis, lorsque les différents objets de vision vont tous se placer devant le même ennemi. Ce qui est logique, je le conçois ! Mais comment faire pour que chaque ennemi se crée un objet de vision propre à lui-même ?
Merci d'avance ! |
|
| |
glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: Re: Différencier deux mêmes objets Ven 16 Mai 2014 - 23:32 | |
| il faut que lors de la creation de l'objet tu lui declare une variable qui sera l'id de son objet parent : dans l'objet ennemi: - Code:
-
obj = instance create(obj_vision, 0,0); obj.m_parent = ID // Je me souviens plus exactement du nom de la variable id d'un objet, il faudrait cherche dans la documentation puis ensuite dans l'objet vision tu peut faire - Code:
-
x=m_parent.x+lengthdir_x(obj.m_parent.direction, 10); y=m_parent.y+lengthdir_y(obj.m_parent.direction, 10); |
|
| |
loic01222 Plutôt bien
Messages : 49
| Sujet: Re: Différencier deux mêmes objets Sam 17 Mai 2014 - 12:56 | |
| Donc je crée une variable dans l'objet vision qui définira son ID à partir de, par exemple, une variable globale qui s'incrémente à chaque fois qu'un objet vision est créé ?
EDIT : Je pense que je vais plutôt créer plusieurs objets différents, du genre "obj_ennemi1", "obj_vision1", "obj_ennemi2", "obj_vision2", etc. Ça va me limiter en nombre d'ennemi et c'est pas la solution la plus pratique (loin de là), mais n'étant pas doué en GML je pense que ça serait une bonne solution... |
|
| |
Asu Utilisateur confirmé: Rang ****
Messages : 895
| Sujet: Re: Différencier deux mêmes objets Sam 17 Mai 2014 - 18:58 | |
| ça serait pas plus pratique de simplement de faire tout ça dans l'event draw de l'objet ennemi? _________________ <Cysteine> nON mais la touche maj s'active/se désactive toute seule <Cysteine> et a du mal à réponDRE QUANd j'appuie dessus <Cysteine> et je l'ai démont2? IL Ny a rien DEDANs
|
|
| |
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Différencier deux mêmes objets Sam 17 Mai 2014 - 22:35 | |
| La variable c'est tout simplement id (en minuscules), après le code de gabin49 marche parfaitement. Et nan je pense pas soundii, puisque je suppose que ia aussi toute une partie du code pour détecter des objets dans le cône. _________________ Je suis partie sur les ailes du vent et la tempête m'a ramenée.
|
|
| |
chopsuey Utilisateur confirmé: Rang ***
Messages : 523 Localisation : saint etienne Projet Actuel : All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
...
| Sujet: Re: Différencier deux mêmes objets Dim 18 Mai 2014 - 19:12 | |
| Mais non c'est tout simple ne fais surtout pas ça ! Dans l'event create de ton objet ennemi tu crée ton objet vision avec instance_create. Cette fonction en plus de créer une instance va retourner la variable "id" de cette nouvelle instance. Pour récupérer cette id il faut l'associer à une variable exemple: id_vision=instance_create(x,y,obj_vision) l'instance sera créer et id_vision serra égal à l'id de cette instance. Maintenant que tu connais l'identité de cette instance tu peux modifier ses variables. Tu peux lui dire que son x et son y seront égal au x et y de l'instance actuel (l'ennemi qui là créer) Dans step ennemi: id_vision.x=x id_vision.y=y Le x de id_vision soit le x de l'identité de l'instance créer est = au x de l'instance ennemi. _________________ - Spoiler:
|
|
| |
glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: Re: Différencier deux mêmes objets Dim 18 Mai 2014 - 21:41 | |
| C'est exactement ce que j'ai fait, juste que c'est l'objet ennemi qui garde l'id de l'autre mais bon... |
|
| |
chopsuey Utilisateur confirmé: Rang ***
Messages : 523 Localisation : saint etienne Projet Actuel : All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
...
| Sujet: Re: Différencier deux mêmes objets Dim 18 Mai 2014 - 21:55 | |
| Ouais je sais mais il a pas compris alors je lui réexplique à ma façon. _________________ - Spoiler:
|
|
| |
glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: Re: Différencier deux mêmes objets Dim 18 Mai 2014 - 22:25 | |
| ah ok, tu voulais parler de sa solution drastique, j'avais mal compris XD C'est pas la première fois que je vois des personnes qui simplifie la tache a faire en passant par un horrible chemin... Une fois, c'était un gars qui de plaignait d'une baisse conséquente du FPS dès qu'il y avais 10 ennemi sur mon ecran (j'ai quand même une GTX660, pour un jeu 2D vue du dessus sorti de GM, faut pas se leurrer...). On a regarder ensemble d'où venait le problème pendant un long moment et il m'a fait voir sa collision des murs avec les ennemis. Le mur était un ensemble de 2 sprites : une pour la couleur et une pour le masque qui faisait TOUTE la room. Et pour couronner le tout, le jeu était développé en 4k (3 840 × 2 160 pixels) donc faire du pixels perfect avec un sprite 4k, ca le fait pas (Mais c'est pas ca le pire, le pire, c'est qu'il ne m'a pas cru et a garder cette technique -_-')
Tout ca pour dire qu'il ne faut pas passer obligatoirement par la simplicité, celle ci nous induit en erreur et compliquera le développement du jeu et la détection d'erreurs. |
|
| |
chopsuey Utilisateur confirmé: Rang ***
Messages : 523 Localisation : saint etienne Projet Actuel : All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
All work and no play makes Jack a dull boy
...
| Sujet: Re: Différencier deux mêmes objets Lun 19 Mai 2014 - 1:15 | |
| Quand je débutais j'en est fais des conneries comme ça Ya plus de 3 ans quand j'ai essayé pour la 1er fois de faire un jeu avec game maker j'avais à peut près 50 objets différent pour les déplacements de mon perso. C'était à la fois très débile et en même temps très complexe, une vrais usine à gaz... Et je comptais dupliquer tous ces objets pour chaque armes ou accessoire différents Je comprend pas comment j'ai fais pour être aussi con. _________________ - Spoiler:
|
|
| |
glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: Re: Différencier deux mêmes objets Lun 19 Mai 2014 - 1:57 | |
| On sent bien qu'on est tous passer par la XD (d'ailleurs en parlant d’être con, je rappelle qu'il y a toujours mon ancien blog de quand j'avais 13 ans, c'est à peu près a cette age la ou j'ai toucher a game maker XD, il est dans mon lien de site web, a coté du lien "MSN") |
|
| |
FlavoursGames Très bonne participation
Messages : 111
| Sujet: Re: Différencier deux mêmes objets Sam 24 Mai 2014 - 19:01 | |
| Bonjour, J'aurai un problème similaire a celui-ci, enfaite j'aimerai que game maker vérifie une condition pour tout les objets du même nom. ma condition est la suivante : if (oPlayer.y < oPlatform_6.y and oPlayer.y > oPlatform_6.y-80) seulement si il y a deux objet oPlatform_6 dans la même room cela ne marchera que si le joueur ce trouve sur la toute première oPlatform_6 poser. j'ai donc essayer un "truc" comme sa: if (oPlayer.y < oPlatform_6.id.y and oPlayer.y > oPlatform_6.id.y-80) sans résultat... j'aimerai éviter de passer par un "instance_create". Une idée ou suggestion ? :/ |
|
| |
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Différencier deux mêmes objets Sam 24 Mai 2014 - 19:14 | |
| Tu fais une boucle en parcourant tous les objets. Tu peux récupérer le nombre d'objet avec instance_count, puis l'id avec le tableau instance_id. Ensuite t'as juste à vérifier que c'est bien le bon type d'objet avec object_index. Si tu veux gagner en perfs, tu crée une liste de tes objets au début du jeu (et en la maintenant a jour), comme ca t'as moins d'objets a parcourir. _________________ Je suis partie sur les ailes du vent et la tempête m'a ramenée.
|
|
| |
FlavoursGames Très bonne participation
Messages : 111
| Sujet: Re: Différencier deux mêmes objets Sam 24 Mai 2014 - 19:25 | |
| Quelque chose comme sa : var i; for (i = 0; i < instance_count; i += 1;) { with (instance_id[i]) speed += 0.1; } C'est un exemple pécho dans le manuel lol, je connaissais pas ces fonctions . Les objets qu'ils va parcourir sont ceux qui ce trouvent dans la room ? |
|
| |
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Différencier deux mêmes objets Sam 24 Mai 2014 - 19:26 | |
| C'est exactement ca A noter qu'il ne tient pas compte des objets désactivés. _________________ Je suis partie sur les ailes du vent et la tempête m'a ramenée.
|
|
| |
FlavoursGames Très bonne participation
Messages : 111
| Sujet: Re: Différencier deux mêmes objets Sam 24 Mai 2014 - 19:37 | |
| Merci beaucoup! Mais comment l'utiliser avec ma condition ? Je viens de faire un test et sa n'as pas marcher :/ |
|
| |
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Différencier deux mêmes objets Sam 24 Mai 2014 - 20:01 | |
| for(i=0;i<instance_count;i+=1){ obj=instance_id[i]; if(obj.objetc_index==tonObjet){ with(obj){ if (oPlayer.y < y and oPlayer.y > y-80){ // ton code } } } } _________________ Je suis partie sur les ailes du vent et la tempête m'a ramenée.
|
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: Différencier deux mêmes objets Sam 24 Mai 2014 - 20:06 | |
| Et maintenant on se rappelle que with(obj_tonObjet) {...} parcourt toutes les instances de cet objet ;) _________________ Home is not a place, it's a feeling.
|
|
| |
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Différencier deux mêmes objets Sam 24 Mai 2014 - 20:23 | |
| Je me suis posé la question, mais je pensais qu'il prenait la dernière instance crée... ^^' _________________ Je suis partie sur les ailes du vent et la tempête m'a ramenée.
|
|
| |
FlavoursGames Très bonne participation
Messages : 111
| Sujet: Re: Différencier deux mêmes objets Dim 25 Mai 2014 - 0:07 | |
| Sa marche (pleure de joie, sa fait plusieurs jour que j'étais dessus enfaite, j'ai mis du temps a comprendre que GameMaker ne vérifiait pas la condition pour toute les même instance lol ). Merci beaucoup Terence! |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: Différencier deux mêmes objets Dim 25 Mai 2014 - 9:32 | |
| Je complète donc : - Code:
-
with(oPlatform) { if (other.y < y && other.y > y - 80) { //... } } Explications ( voir ici pour la doc) : - with(nomObjet) parcourt toutes les instances de ce type - à l'intérieur d'un with, other est l'instance qui a lancé le with. Ça te sera très utile dès lors que tu voudras gérer plusieurs instances plutôt qu'un seul joueur (les ennemis par exemple). _________________ Home is not a place, it's a feeling.
|
|
| |
FlavoursGames Très bonne participation
Messages : 111
| Sujet: Re: Différencier deux mêmes objets Dim 25 Mai 2014 - 16:15 | |
| C'est d'ailleurs ce que je cherche a faire maintenant merci . mais comme with parcours toute les instances de ce type, j'avais pas besoin de faire une boucle et d’utiliser instance_id etc.. non ? Other représente n'importe qu'elle objet respectant la condition c'est sa ? |
|
| |
onilink_ Modérateur
Messages : 9183 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Différencier deux mêmes objets Dim 25 Mai 2014 - 16:48 | |
| other indique l'id de l'instance qui a utilisé with. |
|
| |
FlavoursGames Très bonne participation
Messages : 111
| Sujet: Re: Différencier deux mêmes objets Dim 25 Mai 2014 - 17:06 | |
| Ah sa m'aide pas trop alors, comment faire pour comparer un ennemis qui lui aura plusieurs même instance dans la room, a la platform qui a elle aussi a plusieurs même instance ? - Code:
-
// Platform Object for (i=0; i < instance_count; i++) { platform = instance_id[i]; if (platform.object_index == oPlatform_6x) { with(platform) { if (oPlayer.y < y and oPlayer.y > y-80) and (oPlayer.x >= x and oPlayer.x <= x+144) { // Mes fonctions } } Je rajoute une autre boucle a l’intérieur de la conditions " if platform.object_index == oPlatform_6x " ? qui elle cherchera l'objet ennemis pour ensuite faire la comparaison entre les deux (ennemis et platforme ) ? |
|
| |
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Différencier deux mêmes objets Dim 25 Mai 2014 - 18:02 | |
| En fait le with et le nom de l'instance ca remplace mon code, donc pour tout comparer entre eux : with(ennemi){ with(plateforme){ // tes tests, ou self vaut la plateforme courante et other l'ennemi courant } } Pour comprendre le plus simple ca reste d'afficher des messages avec les id de self et other. _________________ Je suis partie sur les ailes du vent et la tempête m'a ramenée.
|
|
| |
FlavoursGames Très bonne participation
Messages : 111
| Sujet: Re: Différencier deux mêmes objets Dim 25 Mai 2014 - 19:12 | |
| Ah okey, je savais pas qu'on pouvais faire sa avec les with, sa marche impec! Merci a tous pour votre aide et patience ! |
|
| |
FlavoursGames Très bonne participation
Messages : 111
| Sujet: Re: Différencier deux mêmes objets Mer 4 Juin 2014 - 13:14 | |
| Bonjour,
Je reviens vers vous car j'aimerai savoir si quelqu'un sait comment comparer plus que 2 objets entre eux ? par exemple 4 ?
je peut rajouter plus que 2 with() dans ma boucle ? et mettre le nom de l'objet directement plutôt que self et other ? |
|
| |
Térence Utilisateur confirmé: Rang *****
Messages : 2213 Localisation : Oui
| Sujet: Re: Différencier deux mêmes objets Mer 4 Juin 2014 - 18:14 | |
| Faut que tu passe par des variables intermédiaires : monobj=self dans tes boucles, mais tu va ptet devoir utiliser des variables globales :/ M'enfin ca reste merdique niveau optimisation, essaie de passer par des scripts ou de faire autrement... (deja rien que le nombre d'itérations avec 4 boucles imbriquées... :/) _________________ Je suis partie sur les ailes du vent et la tempête m'a ramenée.
|
|
| |
FlavoursGames Très bonne participation
Messages : 111
| Sujet: Re: Différencier deux mêmes objets Mer 4 Juin 2014 - 18:30 | |
| Ce que je veux programmer est plutôt compliquer pour moi... Enfaite y faudrait que je fasse une première condition qui test sur qu'elle plateforme ce trouve le joueur ensuite je fais une autres condition qui test si la plateforme ou ce trouve le joueur n'est en collision avec aucune autre plateforme, et si il y a collision, alors tester si cette autre plateforme est elle même en collision avec une autres etc. Et bien sur il faut que je test sa du coter gauche comme du coter droit de la plateforme ou ce trouve le joueur.. donc niveau optimisation j'aimerai me renseigner avant de coder quelque chose de fonctionnel ( si j'y arrive déjà.. ) mais pas du tout optimiser... pour leur donner une id au plateforme différentes, j'ai lu que je pourrai faire quelque chose comme sa : - Code:
-
// J'initialise cette variable dés le debut global.plateformeindex = 0; Puis dans l'event create de mes plateformes je mettrai : - Code:
-
global.plateforme[global.plateformeindex] = id; global.plateformeindex += 1; Bon je n'es pas réellement trouver de solution encore, et j'essaye de me renseigner pour savoir ce qui serai le mieu et si possible le plus optimiser. Si quelqu'un a une idée :/ |
|
| |
Contenu sponsorisé
| Sujet: Re: Différencier deux mêmes objets | |
| |
|
| |
| Différencier deux mêmes objets | |
|