Utiliser une instance de classe principale dans une sous_classe pour la complete [Résolu]

Signaler
Messages postés
92
Date d'inscription
mercredi 11 octobre 2006
Statut
Membre
Dernière intervention
5 décembre 2010
-
Messages postés
13
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
29 janvier 2009
-
Salut,
je suis confronté à un problème je cherche la meilleure manière de le faire...
j'ai un chargeur xml central que viennent etendre divers parseurs avec des methodes appropriées, ça vient construire un objet infos qui me sers à gérer mon site
voila le problème :
j'ai mon objet créé dans celui ci j'ai un tableau qui correspond aux legendes du site.
Je voudrais completer le tableau de cette instance avec les légendes attachée aux images afin d'avoir toute les strings enregistrées sur le même objet.
Or depuis ma sous classe je ne parviens pas à recupérer mon instance créée depuis la scène principale et de faire fonctionner ses methodes
j'ai essayé en rendant mes classes dynamiques, ou en fournissant l'objet dans les paramètres de ma classe mais rien à faire le compilateur s'obstine à me dire non que les methodes que j'appelle ne sont pas des fonctions.
Je crois que j'ai raté un truc dans ma compréhension des classes...
Je peux toujours faire un objet et le coller à mon objet principal mais j'aurais aimé tout centraliser.
Est-ce que quelqu'un peut me brieffer, ou me laisser un lien pertient sur la façon de croiser des classes pour la fabrication d'une seule instance d'objet complexe ?

Steph

6 réponses

Messages postés
1203
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2009
2
Hello,

?????????? Alors là... j'ai RIEN compris à ton probleme... !!!!!!!!!!!!!!!!!!!!

peux-tu joindre un bout de code parce que bon :
Classe, sous-classe (qu'appelles tu une sous-classe ?), objet complexe, méthode, fonctions... je pense que tu mélanges beaucoup de choses différentes là.
Croiser des classes ? tu veux faire un élevage

Sérieusement, si tu veux qu'une instance d'une classe ai accès a une instance d'une autre classe, soit, si c'est pertinent, tu passe par un singleton; ou alors, tu passes en parametre à la deuxieme classe (est-ce cela la sous classe ?) une référence a l'instance de la première classe

var c1:Classe1 = new Classe1()
var c2:Classe2 = new Classe2(c1)

et dans ta classe 2

class2{
var classe1ref:Classe1
function class2(refC:Classe1){
  classe1ref=refC;
  // ensuite tu auras accès a toutes les méthodes PUBLIQUES de l'instance de ta classe 1
  // via classe1ref.maMethode()
}

@+
Messages postés
92
Date d'inscription
mercredi 11 octobre 2006
Statut
Membre
Dernière intervention
5 décembre 2010

merci pour ta reponse... ça m'aide déjà un peu !
Oui je veux les croiser pour les rendre plus intelligentes... Une certaine idée de l'eugénisme :)
pour le vocabulaire j'appelle une sous_classe une classe qui vien completer une autre à l'aide d'un override ou qui vient l'etendre...une methode c'est une fonction dans une classe, et une propriété une variable déclarée dans ma declaration de classe... J'ai tout bon non ? :)
plus sérieusement c'est la première fois que je code et en AS3 et en utilisant les classes...Je te raconte pas la taille de la marche !Avant, ah avant, J'avais mes petites fonctions bien rangées dans mes fichiers as que je rendais disponibles depuis le scénario, même chose pour les procédures, je calais tout dans un objet _global et ça marchait très bien ( http://www.holdupstudio.com ) ! là je me sens un peu seul.
J'ai encore un peu de mal à m'en sortir à appeler les objets que je déclare dans la classe... Je m'emmêle encore les pinceaux en effet...
En fait l'idée si je suis bien

Tu crée une classe principale que tu instancie depuis le scénario avec la variable "classe_principale" (par exemple bien sur!).

si tu fais un sous classe avec un objet déclarée" mon_objet" dans la classe qui contient les infos
tu accede à toutes ses propriétes et methodes publiques depuis une troisième classe si tu le passe en paramètre en utilisant :
mon_instance_principale.mon_objet.ma_methode();
ou
mon_instance_principale.mon_objet.mes_propriétés;
j'en suis là...
maintenant si je veux remplir mon_instance_principale.mon_objet.mon_tableau
 en ajoutant de nouvelles occurences mais depuis une classe tierce : "autre_sous_classe", j'ai besoin de passer une  des mes deux autres classes  en dynamique ? ou d'user du return() ? ou encore simplement d'utiliser ma mathode de remplissage de tableaux qui se trouve sur "sous_classe" en important dans "autre_sous_classe" ? là je suis largué ...

Merci encore pour ton aide :)

Steph
Messages postés
1203
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2009
2
Ah mince...
c'est de l'AS3. J'en suis encore à l'AS2 moi

Je me demende si tu ne devrait pas plutot passer par des evenements.
La classe qui doit récuperer les données ecoute un événements. lorsque celui-ci se produit cela déclenche une fonction (une méthode, effectivement) dans ta classe qui recevra en parametre les données à introduire dans ton tableau

Mais concretement comment le faire enAS3, là, je sais pas t'aider.

@+
Messages postés
92
Date d'inscription
mercredi 11 octobre 2006
Statut
Membre
Dernière intervention
5 décembre 2010

J'ai commencé l'AS3 il y a une semaine :) Alors tu sais, je suis pas bien avancé... mais j'ai envie de voir mes sites tourner quand ils auront viré l'AVM1 dans le flash player 20 ! L'update du langage me semble interessante et je me dis que j'aurais moins de chemin à faire pour m'incruster dans le javascript plus tard !
là pour l'instant j'en suis déjà a comprendre comment je peux echanger et organiser mes infos... les évènement je verrais ça après au moment ou toute les infos étant rentrées je lancerai l'ouverture de la page d'acceuil.

Mais le fonctionnement de base des classes me semble à peu près identique a l'AS2... d'après ce que disent les tutos !
merci encore pour ton aide.

Steph
Messages postés
13
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
29 janvier 2009

heu j'ai probablement tout faux en plus d'être en retard sur le sujet parcque déjà je suis pas hyper familier des classes as2 mais en plus je ne me suis pas mis à l'as3 mais à ce que je pense comprendre si tu bosses avec des classes ecrites dans des fichiers séparés rien ne t'interdit d'importer d'autres classes en entête de fichier avant l'instruction class et de l'instancier à l'interrieur même de ta classe
un truc genre :

fichier1 "masousclasse.as":

class maclasse{
private var _x:Number;
function masousclasse(x:Number){
_x=x;
}
}

fichier2 "maclasse.as":

import  masousclasse;
class maclasse{
private var _test:masousclasse=new masousclasse(3);
function maclasse(){
trace(_test._x);//3
}
}
Messages postés
13
Date d'inscription
mardi 21 octobre 2008
Statut
Membre
Dernière intervention
29 janvier 2009

j'en profite pour poser une question car je n'ai pas trouvé de post plus en rapport que celui-ci.
voila mon souci j'aimerais utiliser des fonctions flash natives dans la definition d'une classe,hors pour nombre d'entre elles(nottament le gestionnaire d'evenement de movieClipLoader ou encore setInterval) cela ne fonctionne  que si je les appelle dans une methode statique et non dans la fonction constructeur.
j'ai trouvé une classe permettant de déformer une image qui attendait un id de liaison en parametre constructeur,j'ai souhaité la modifier pour qu'elle accepte un chemin à la place et s'occupe du chargement.
vous voyez surement venir le probleme il faut attendre l'evenement onloadComplete pour pouvoir commencer le traitement à proprement parler.
j'y suis parvenu grace à ce qui me semble être une bidouille du dimanche, j'esperais que quelqu'un puisse me dire si c'est la bonne manière de procéder:

import flash.display.BitmapData;

class deformimg{
public static var tous:Array= [];
private var _chemin:String;
private var _mc: MovieClip;
private var _texture:BitmapData;

static function initlast():Void{
_root.createEmptyMovieClip("mctemp",_root.getNextHighestDepth());
var mcLoader:MovieClipLoader = new MovieClipLoader();
var ecouteurChargement:Object = new Object();
ecouteurChargement.onLoadInit = function(target:MovieClip):Void {
    var myBitmapData:BitmapData = new BitmapData(target._width, target._height);
    myBitmapData.draw(_root.mctemp);
    tous[tous.length-1].__init(myBitmapData);
    target._visible =false;
};
mcLoader.addListener(ecouteurChargement);
mcLoader.loadClip(tous[tous.length-1]._chemin, _root.mctemp);
}

public function deformimg(chemin:String) {

_root.createEmptyMovieClip("mc",_root.getNextHighestDepth());
_mc = _root.mc;
_chemin = chemin;
deformimg.tous.push(this);
deformimg.initlast();
}

private function __init(monbitmap:BitmapData ): Void {
_texture=monbitmap;
etc...

toute la partie en rouge ne fonctionne pas si je la mets directement dans la fonction constructeur au lieu d'appeler une méthode statique qui va se charger de rappeler la methode init de la derniere instance de cette classe.
d'avance merci à toute remarque