AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 [Résolu] Heritage

Aller en bas 
AuteurMessage
ocin53
Petit bavard
avatar

Messages : 55

MessageSujet: [Résolu] Heritage   Sam 21 Oct 2017 - 9:49

Je continue.
J'ai compris le principe et je m'en sers "de base" pour les monstres.

Mais je voudrais m'en servir pour optimiser un peu le code des interactions
Pour le moment, j'ai un code pour chaque déclencheur....un peu lourd.

Mes déclencheurs sont soit des boutons, des leviers, etc
Et chacun peut actionner soit des portes, des grilles, des trappes, etc..
Chaque déclencheur placé sur la room, contient dans son creation code, une variable qui détermine son type et une autre qui contient le numéro de l'objet qu'il actionne (numéro indiqué dans le création code de l'objet dans la room)

J'ai donc crée un objet O_déclencheur, parent de tous les types de déclencheurs.

Dès qu'il y aura interaction avec le O_déclencheur, le script devra donc récupérer ces deux variables.
Puis il fera une simple boucle with avec les objets concernés par le code pour que l'action se fasse.

Donc, la question: le parent peut-il récupérer les variables de son enfant ? Et quelles instructions utiliser ?
J'ai pas l'impression que c'est faisable car je n'ai rien trouvé dans l'aide. J'imaginais pouvoir récupérer l'ID de l'enfant, et après ses variables...
Bonus, il faudrait que l'enfant puisse être détruit (exemple d'un bouton placé sur un mur, qui détruirait le mur-et donc autodestruction du bouton)


Dernière édition par ocin53 le Mar 31 Oct 2017 - 13:45, édité 1 fois
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8995
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: Re: [Résolu] Heritage   Sam 21 Oct 2017 - 11:22

De souvenir l'héritage GM est extrêmement limité.
Les seuls choses qu'il va te permettre de faire c'est:
-considérer un object enfant de type compatible avec le type parent
-"copier/coller" automatiquement le code contenu dans les parents, sur les enfants (donc je doute qu'il y ai moyen de faire ce que tu veux, qu'on appelle dans le jargon orienté objet polymorphisme)

Quand je faisais mon petit zelda la solution que j'avais utilisé, c'est d'avoir un unique objet avec tous les behaviours du même type dedans, et quand je le plaçais dans la room, j'utilisais l'option pour ajouter du creation code a l'interieur, ce qui me permettait de le relier manuellement a une instance, et lui assigner au cas par cas l'action qu'il devait faire.

Quand a """l'héritage""" il ne m'a jamais servi a autre chose qu'a simplifier les collisions (et encore). Faire un découpage propre en fonctions et les réutiliser étant bien plus efficace :/

_________________
                 
Revenir en haut Aller en bas
ocin53
Petit bavard
avatar

Messages : 55

MessageSujet: Re: [Résolu] Heritage   Sam 21 Oct 2017 - 11:52

Merci Oni, c'est que j'avais compris aussi (hélas). Il s'agit d'un "pseudo" héritage.
Je vais donc continuer avec les creation code
Sinon en récupérant l'ID de l'objet avec lequel le héros interagit, ne peut-on pas faire un truc comme:
myvar=ID.variable_untel

Comme ça je passe la variable dans le script.
Je pensais même à un gencode et donc une variable unique:
1er chiffre, le type du déclencheur
2eme, le type du déclenché
3 le chiffre commun qui lie le déclencheur et son "déclenché"

avec 9 chiffres ya de quoi de faire déjà
Revenir en haut Aller en bas
Linky439
Utilisateur confirmé: Rang *****
avatar

Messages : 2627
Localisation : Sur le forum du CBNA...ou pas
Projet Actuel : La Galaxie Scellée

MessageSujet: Re: [Résolu] Heritage   Sam 21 Oct 2017 - 12:28

C'est possible de récupérer l'ID, en effet, genre à la création :
Code:
ins = instance_create(...)
ins.speed = 0

Ou à la collision, avec la variable "other" notamment.

Pareil pour la destruction, si tu as l'ID, tu peux faire un
Code:
with(ins) {instance_destroy()}

Je sais pas si c'est très "propre" mais ça marche en tout cas Yum!

_________________
Cliquez pour accéder aux topics dédiés !
   
Revenir en haut Aller en bas
ocin53
Petit bavard
avatar

Messages : 55

MessageSujet: Re: [Résolu] Heritage   Sam 21 Oct 2017 - 13:06

Ah oui, avec un instance_place, je récupère l'id, et donc ma variable. pas mal ça Linky !!
Revenir en haut Aller en bas
ocin53
Petit bavard
avatar

Messages : 55

MessageSujet: Re: [Résolu] Heritage   Lun 23 Oct 2017 - 17:10

Code:
inst=instance_place(Ohero.x,Ohero.y-3,O_declencheur)

switch(inst.type_declencheur)
{
    case 1:
        with(O_porte_ouvrir)
        {
            if porte_numero == inst.ouvre_porte_numero
            {
                if porte_ouverte=false {image_index=1; solid=!solid;porte_ouverte=true; }
                else {porte_ouverte=false;image_index=0;solid=!solid}
            }
        };break;
(je copie pas tout le code) Bizarre, le switch fonctionne avec "inst", mais dans le with, ça ne marche plus. Pourtiquoidonc ?
Si je remplace le inst par le nom de l'objet, ça fonctionne bien sûr.
Revenir en haut Aller en bas
Linky439
Utilisateur confirmé: Rang *****
avatar

Messages : 2627
Localisation : Sur le forum du CBNA...ou pas
Projet Actuel : La Galaxie Scellée

MessageSujet: Re: [Résolu] Heritage   Lun 23 Oct 2017 - 21:24

La valeur "inst" n'est définie que dans l'objet qui appelle ton bout de code, or le bout de code après le with prends place dans O_porte_ouvrir : si tu veux que O_porte_ouvrir connaisse la valeur de "inst", il faut que tu lui affectes sa propre variable inst Wink

Un petit
Code:
O_porte_ouvrir.inst = inst
juste avant le with devrait faire l'affaire Smile


Au passage, tu as surement coché la case "initialiser à 0 les variables non initialisées" non ? Sinon, GM devrait t'envoyer un message d'erreur t'indiquant que "inst" est une variable inconnue de l'objet O_porte_ouvrir ^^

D'ailleurs, en replaçant inst par le nom de l'objet, ça ne fera effet que sur la première instance de cet objet présente dans la room Wink

_________________
Cliquez pour accéder aux topics dédiés !
   
Revenir en haut Aller en bas
ocin53
Petit bavard
avatar

Messages : 55

MessageSujet: Re: [Résolu] Heritage   Mar 24 Oct 2017 - 16:24

Je me doutais qu'il y avait une question de "portée" des variables, mais j'avoue ne pas avoir pensé à "passer" la variable à l'objet (balèze à acquérir les réflexes de l'orienté objet)

En tous cas, ça marche, merci Linky. J'ai pas trouvé la case à cocher par contre. Je suis sous GMS, elle n'existe peut-être pas ?
Je vais avancer un peu sur les graphs maintenant. Ca motive toujours les graphs. Smile
Revenir en haut Aller en bas
Linky439
Utilisateur confirmé: Rang *****
avatar

Messages : 2627
Localisation : Sur le forum du CBNA...ou pas
Projet Actuel : La Galaxie Scellée

MessageSujet: Re: [Résolu] Heritage   Mer 25 Oct 2017 - 8:43

Citation :
En tous cas, ça marche, merci Linky. J'ai pas trouvé la case à cocher par contre. Je suis sous GMS, elle n'existe peut-être pas ?

Ah, peut-être... C'est un peu batard si GMS force d'office les variables non initialisées à 0. C'est parfois un peu ****** de devoir déclarer toutes ses variables dans les Create des objets, mais au moins ça permet de repérer ce genre d'erreur ^^

Bon courage pour la suite Smile

Par contre, en me relisant, je me rends compte que ce que je t'ai donné comme correction ("O_porte_ouvrir.inst = inst") marche que si tu n'as qu'un seul objet O_porte_ouvrir. Sinon, faut chopper l'ID du bon O_porte_ouvrir et lui affecter à lui la valeur de inst Wink

_________________
Cliquez pour accéder aux topics dédiés !
   
Revenir en haut Aller en bas
ocin53
Petit bavard
avatar

Messages : 55

MessageSujet: Re: [Résolu] Heritage   Jeu 26 Oct 2017 - 16:42

Linky439 a écrit:

Par contre, en me relisant, je me rends compte que ce que je t'ai donné comme correction ("O_porte_ouvrir.inst = inst") marche que si tu n'as qu'un seul objet O_porte_ouvrir. Sinon, faut chopper l'ID du bon O_porte_ouvrir et lui affecter à lui la valeur de inst Wink
Euh non, ça marche. J'ai mis deux objets portes (O_porte_ouvrir) avec une variable "porte_numero" pour leur numéro. ( 1 et 2 )
J'ai placé ce numéro dans l'objet déclencheur (ouvre_porte_numero) et ça fonctionne. J'ai testé le 2 puis le 1, et ça marche
Revenir en haut Aller en bas
Linky439
Utilisateur confirmé: Rang *****
avatar

Messages : 2627
Localisation : Sur le forum du CBNA...ou pas
Projet Actuel : La Galaxie Scellée

MessageSujet: Re: [Résolu] Heritage   Jeu 26 Oct 2017 - 20:03

Tiens, c'est étrange, pour moi ça n'affectait qu'un seul objet... Ca a ptet changé sur GMS ceci dit !

Bref, si ça marche comme il faut, cool alors Smile

_________________
Cliquez pour accéder aux topics dédiés !
   
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: [Résolu] Heritage   

Revenir en haut Aller en bas
 
[Résolu] Heritage
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Heritage Rouge
» Crime résolu....
» midi file TON HERITAGE BENJAMIN BIOLAY
» [résolu]Sous quel corps d'arme servait-il ?
» [résolu] Connaitre les individus conduisant du SOSA 1 au SOSA n

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide débutants-
Sauter vers: