IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 1 & ActionScript 2 Discussion :

[AS2] Données XML et évènements


Sujet :

ActionScript 1 & ActionScript 2

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut [AS2] Données XML et évènements
    Bonjour, ceci est mon premier post et malheureusement commence par un problème...

    Donc J'interface une animation Flash avec du XML. Je récupère les données dans un fichier externe et je voudrais qu'au survol d'un clip, je puisse reconstituer les données correspondantes à ce clip.

    Pour ça j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	longueur=xmlDoc.firstChild.childNodes.length;
    for (var i=0; i<longueur;i++) { 
     
    	var zonage = xmlDoc.firstChild.childNodes[i].attributes.zFlash;
    	var titre = xmlDoc.firstChild.childNodes[i].attributes.titre;
    	var type = xmlDoc.firstChild.childNodes[i].attributes.categorie;
    	var descr = xmlDoc.firstChild.childNodes[i].attributes.descr;
    	var lien = xmlDoc.firstChild.childNodes[i].attributes.lien;
    	var logo = xmlDoc.firstChild.childNodes[i].attributes.image;
     
    nomZone=eval(zonage+"_mc");
     
    ...
    Ensuite le problème est que quand je crée un évènement : onRollOver, onRollOut ou onRelease d'un clip (nomZone), il sort de la boucle et m'affiche systématiquement les valeurs du dernier passage (j'ai 4 entrées dans le fichier XML et donc affiche la 4e entrée).

    Alors j'ai essayé de stocker les valeurs dans un tableau, mais je ne sais pas trop comment ça fonctionne vu que je débute en AS2 :

    après nomZone=eval.... j'ai rajouté ces lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Occ=new Array();
    	Occ.push(nomZone,titre,type,descr,lien,logo);
    	//trace (Occ[0]);
    le trace me donne 4 valeurs (zone1, zone2, zone3,zone4) (logique puisque je suis dans la boucle) mais Occ a t'il vraiment stocké ces 4 valeurs ? Car, après la boucle, j'appelle mes évènements :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    var lg =Occ.length;
    	trace(lg);
    			for (var i = 0; i<lg; i++) {
    				trace(Occ[i]);
    				this.Occ[0].onRollOver = function() {
    				clearInterval(transp);
    				details_mc.titre_txt.text=titre;
    				details_mc.rubrique_txt.text=type;
    				details_mc.descr_txt.text=descr;
    				opac=setInterval(surbr, 30);
    				}
     
    				this.nomZone.onRollOut = function() {
    				clearInterval(opac); 
    				transp = setInterval(soubr, 30);
    				trace(nomZone._alpha);
     
    				}
     
    				this.nomZone.onRelease = function() {
    					getURL(lien, _parent);
     
    				}	
    			}
    l'évènement RollOver est un essai, mais je n'arrive pas à récupérer ces fameuses 4 entrées.

    Quand je teste Occ[0][0] il me met undefined.

    Si quelqu'un peu éclairer ma lanterne?

  2. #2
    Membre averti Avatar de titouille
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    353
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 353
    Points : 356
    Points
    356
    Par défaut
    Hellop !!


    d'abord, ceci est une erreur...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Occ = new Array();
    Occ.push( nomZone, titre, type, descr, lien, logo );
    la méthode push ne prend qu'un seul paramètre... ça peut être un paramètre de n'importe quel type, mais en aucun cas plusieurs...

    Ce que tu cherche à faire, c'est ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Occ.push( [nomZone, titre, type, descr, lien, logo] );
     
    // ou ça, c'est la même chose...
    Occ.push( new Array( nomZone, titre, type, descr, lien, logo ) );
    Dans un emplacement du tableau, je place un tableau. J'ai donc un tableau à 2 dimensions que je peux pointer avec la syntaxe

    Ensuite, ça serai po mal si tu pointais vers Occ[i] plutot que NomZone ou Occ[0] lorsque tu affecte les gestionnaires d'évenements (dans la boucle for)
    Toi tu fais l'affectation du rollOver sur Occ[0], donc toujours à l'index 0, et tu fais l'affectation de rollOut et release sur NomZone, donc tu vas écraser à chaque fois les gestionnaires affectés pour qu'il ne reste plus que le dernier affecté à tous...

    Bon courage, à+

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Ok merci, je suis en train de faire des tests

    Pour les évenements c'était juste un test donc j'avais pas tout mis en définitif mais plutot des controles avec des trace.

    En fait un tableau à 2D c'est ce que je cherchais à faire mais je ne savais pas comment

    Par contre j'ai essayé comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (var i = 0; i<longueur; i++) {
     
    Occ=new Array();
    Occ.push(i);

    Donc là j'ai bien Occ[0]=0, Occ[1]=1, etc...

    mais quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Occ[i].push( [nomZone,titre,type,descr,lien,logo]);
    il me met des undefined quelque soit le test demandé et ne calcule plus la longueur du tableau.


    Par rapport aux gestionnaires d'évènements, en fait je ferai un truc du genre ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var lg = Occ.length;
    for (var j = 0; j<lg; j++) {
     
    	var lgo = Occ[j].length;
     
    		this.Occ[j][0].onRollOver = function() { ... }

  4. #4
    Membre averti Avatar de titouille
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    353
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 353
    Points : 356
    Points
    356
    Par défaut
    Hello !!

    Occ[i].push( [nomZone,titre,type,descr,lien,logo]);

    ça, tu ne peux pas le faire, si Occ[i] n'a pas été défini.

    D'abord tu défini Occ = new Array();

    mais ensuite, tu essaye tout de suite de faire Occ[i].push([...]);

    c'est juste Occ.push( [...] );

    pas besoin de passer l'index... t'as intérêt à faire des tests avec les tableaux pour savoir un peu ce que tu fais, ça à pas l'air encore très clair...


    Sinon, ton dernier code semble Ok, l'affectation du rollOver se fait bien sur Occ[j][0], qui correspond au mc à l'index j.

    Bon courage, a++

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Oui en effet, je ne crois pas avoir tout compris

    Si je fais : (toujours dans la boucle)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Occ=new Array();
    Occ.push([..]);
    sans indice, il me met tout sur Occ[0] (pas d'autre indice créé)

    du coup Occ[0][...] ne me donne que la dernière entrée et ca revient au meme problème qu'avant

    Ce qu'il me faudrait c'est pour l'entrée 1 avoir les infos a, b, c, l'entrée 2 avoir les infos a', b', c'

    Donc je croyais que le i avait une place importante pour un tableau en 2D
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Occ[0][0]=a
    Occ[0][1]=b
    Occ[1][0]=a'
    Occ[1][1]=b'
    //etc...
    J'ai également essayé avec un
    Occ.push(i);
    et directement après avec
    Occ.push([..]);

    mais quelquesoient les écritures que je fasse, hors de la boucle il me donne toujours la dernière entrée.

    j'ai également essayé Occ.push(i,[...]), Occ[i].push(i) ..., Occ.push([i],[...]),

    Là je dois admettre que je suis un peu perdue....

  6. #6
    Membre averti Avatar de titouille
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    353
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 353
    Points : 356
    Points
    356
    Par défaut
    Ton problème est en réalité tout simple


    Dans ta boucle, tu fais :

    Occ = new Array();
    Occ.push( ... );


    si tu fais "new Array()" dans la boucle, à chaque passage, Occ est réinitialisé en tant que tableau vide...

    Tu dois initialiser le tableau en dehors de la boucle (avant), puis ça fonctionnera correctement

    Bon courage, a++

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    ah mais oui!!!!!


    Pfff!! ca fait je sais pas combien de temps que je planche sur mon anim et j'avais carrément oublié ce petit morceau de 3 mots.... et de le déplacer!


    Mille fois merci!!!

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Juste une pitite dernière question pour les évènements..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    var lg = Occ.length;
     
    for (var j = 0; j<lg; j++) {
     
    		this.Occ[j][0].onRollOver = function() {
    			clearInterval(transp);
    			//si le titre n'est pas renseigné, on affiche le nom de la zone
    			if (Occ[j][1]=="") {
    				Occ[j][1]=Occ[j][0];
    			}
    			details_mc.titre_txt.text = Occ[0][1];
    			trace(_root.details_mc.titre_txt.text);
    			details_mc.rubrique_txt.text = Occ[0][2];
    			details_mc.descr_txt.text = Occ[j][3];
    			opac = setInterval(surbr, 30);
     
    		};
    		this.Occ[j][0].onRollOut = function() {
    			clearInterval(opac);
    			transp = setInterval(soubr, 30);
    		};
    		this.Occ[j][0].onRelease = function() {
    			getURL(lien, _parent);
    		};
    }
    //fonction alpha pour éclaircir et obscurcir sous l'action de la souris
    surbr = function () {
     
    	// on opacifie
    	if (Occ[j][0]._alpha<100) {
    		Occ[j][0]._alpha += 10;
    	} else {
    		clearInterval(opac);
    	}
    };
    soubr = function () {
    	if (Occ[j][0]._alpha>40) {
    		Occ[j][0]._alpha -= 10;
    	} else {
    		clearInterval(transp);
    		clearInterval(opac);
    	}
    };
    Mon Occ[j][0] (ou meme les autres à l'intérieur) ne sont pas lus. J'ai essayé avec un eval mais ca ne change rien. Une boucle à l'intérieur de chaque évènement ne servirait à rien.
    Comment je peux faire pour lui faire reconnaitre le j?

  9. #9
    Membre averti Avatar de titouille
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    353
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 353
    Points : 356
    Points
    356
    Par défaut
    Essaye de faire des traces...

    trace( Occ[j][0] );

    et tu regarde dans la fenêtre de sortie ce qu'il t'affiche... si c'est une simple chaine de caractères ou bien si c'est un objet (movieClip). ça te permettra déjà de savoir sur quoi tu pointe avec l'index 0...

    Après, à toi de faire les traces qu'il faut pour arriver à ton but


    Bon courage, a++

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    vivi j'en ai déjà fais pleins!

    quand je fais un trace(Occ[j][0]) dans this.Occ[j][0].onRollOver ...
    il me met un undefined

    Quand je le met juste avant il me fait correctement la boucle "_level0......"
    J'ai l'impression que dans l'évenement il ne comprend pas la variable j

    Ah oui quand je fais un trace(typeof Occ[j][0]) (toujours hors de l'évenement) il me met bien 'movieclip'

  11. #11
    Membre averti Avatar de titouille
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    353
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 353
    Points : 356
    Points
    356
    Par défaut
    Si tu pouvais baliser ton code, ça serai po mal pour la lecture

    tu mets ton code entre 2 balises

    {code}
    {/code}

    Attention, tu remplace les accolades { } par des crochets [ ]... car si je te met l'écriture avec des crochets, il va le parser en tant que code, et on verra rien...


    en fait, je le fais avec ton dernier code et je regarde si je trouve quelque chose de bizarre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    var lg = Occ.length;
     
    for (var j = 0; j<lg; j++) 
    	{
    	this.Occ[j][0].onRollOver = function() 
    		{
    		clearInterval(transp);
    		//si le titre n'est pas renseigné, on affiche le nom de la zone
    		if (Occ[j][1]=="") 
    			Occ[j][1]=Occ[j][0];
     
    		details_mc.titre_txt.text = Occ[0][1];
    		trace(_root.details_mc.titre_txt.text);
    		details_mc.rubrique_txt.text = Occ[0][2];
    		details_mc.descr_txt.text = Occ[j][3];
    		opac = setInterval(surbr, 30);
     
    		};
    	this.Occ[j][0].onRollOut = function() 
    		{
    		clearInterval(opac);
    		transp = setInterval(soubr, 30);
    		};
    	this.Occ[j][0].onRelease = function() 
    		{
    		getURL(lien, _parent);
    		};
    	}
    //fonction alpha pour éclaircir et obscurcir sous l'action de la souris
    surbr = function () 
    	{
    	// on opacifie
    	if (Occ[j][0]._alpha<100) 
    		Occ[j][0]._alpha += 10;
    	else 
    		clearInterval(opac);
    	};
    soubr = function () 
    	{
    	if (Occ[j][0]._alpha>40) 
    		Occ[j][0]._alpha -= 10;
    	else
    		{
    		clearInterval(transp);
    		clearInterval(opac);
    		}
    	};

    A toute

  12. #12
    Membre averti Avatar de titouille
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    353
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 353
    Points : 356
    Points
    356
    Par défaut
    Arf, oui, bien sur, j'aurai du réagir tout de suite par rapport à ton message...

    ça ne fonctionne pas de cette manière... tu fais une erreur de base...


    "this" représente la "portée courante".

    la portée, c'est l'emplacement ou est exécuté le code...
    Si tu place ton code sur la scène directement, on est sur la portée de la scène, _level0.
    Si tu place ton code dans un clip "test" qui est sur la scène, nous sommes alors dans la portée du clip "test", donc _level0.test

    Selon la portée, un code ne peut pas atteindre d'autre éléments directement...

    Par exemple, admettons que j'ai sur la scène 1 clip nommé "test1" ainsi qu'un clip nommé "test2".

    Si je code sur la scène, je peux les atteindre en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    trace( test1 );
    trace( test2 );
    trace( this.test1 );
    trace( this.test2 );
    Il ne faut pas oublier que this représente la portée courante, donc ici, la scène.


    Maintenant, si je code dans "test1"... par exemple, sur la scène, je place ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    test1.onRollOver = function()
    {
    trace( this );
    }
    ça veut dire que j'affecte une méthode "onRollOver" sur mon clip, comme tu tente de le faire... le trace va me tracer "_level0.test1"...

    Pourquoi donc ?? car je suis dans la portée du clip, et non plus celle de la scène. L'évenement onRollOver fait partie du clip, non pas de la scène, donc il est exécuté dans sa propre portée, celle du clip.


    Donc pour reprendre, toi tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for( ... )
    {
    // déjà, fait ça en premier :
    // je récupère une référence au clip stocké dans le tableau.
    // ensuite, je peux travailler avec elle
    var mc = Occ[j][0];
    mc.onRollOver = function()
    {
    // ici, tu appelle 
    this.Occ[j][0];
    }
    }
    Ce n'est pas logique. Tu es dans la portée de "mc", ton clip en cours, et tu fais appel à "this". Donc tu cherche un tableau Occ déclaré dans le clip, alors que ce dernier est déclaré sur la scène (ou ailleurs, je ne sais pas...)


    Mais ton erreur est minime, car il suffit de virer les "this" pour que ça fonctionne...
    Tu vas maintenant te demander pourquoi, alors que tu te trouve dans la portée du clip, tu pourrais atteindre Occ, qui lui est déclaré dans la portée de la scène... ça ne semble pas très logique, n'est-ce pas ??

    Mais ça l'est, pourtant.

    Tout ton code est sur la scène (enfin, j'imagine).

    Si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var mc = this.createEmptyMovieClip( 'mc', 1 );
    var tab = new Array( "hello", " ", "world");
     
    mc.onRollOver = function()
    {
    trace( this );
    trace( _level0.mc );
    trace( tab );
    trace( this._parent.tab )
    }
    en fait, la sortie me donnera :
    _level0.mc
    _level0.mc
    hello, , world
    hello, , world


    Je peux atteindre tab car il est déclaré dans le code au dessus, et l'affectation du gestionnaire se fait dans la portée de la scène (mc.onRollOver = function())

    Maintenant, tu peux encore voir qu'on peut se déplacer pour pointer sur des éléments : dans le dernier code, j'ai fait : this._parent.tab

    d'abord this, qui pointe le clip "mc", ensuite, _parent qui pointe vers le parent de "this", qui est la scène, et enfin, à partir de la scène, je peux pointer sur "tab", le tableau que j'ai créé.

    A toi de faire des tests pour bien comprendre comment les portées fonctionnent.
    Encore une chose. Essaye au maximum de faire du pointage relatif et non pas absolu...

    C'est à dire utiliser this._parent.tab plutot que _level0.tab

    Car si tout d'un coup tu veux charger ton swf (A.swf) dans un autre swf (B.swf), le _level0 correspondra au swf de base (B.swf), plus à celui de la véritable animation (A.swf).


    Enfin, il y a encore un truc très intéressant qui est arrivé avec l'update de Flash MX 2004. La classe Delegate.

    ça te permet d'exécuter du code dans une portée autre que celle qui est à la base...

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    // importation de la classe, en début de fichier
    // avant tout autre déclaration :
     
    import mx.utils.Delegate;
     
    var mc = this.createEmptyMovieClip( 'mc', 1 );
    var tab = new Array("hello", " ", "world");
     
    mc.onRollOver = Delegate.create( this, myFunction )
     
    function myFunction()
    {
    trace( this );
    trace( _level0.mc );
    trace( tab );
    trace( this._parent.tab )
    }
    Cette fois, myFunction sera exécuté dans la portée de la scène, car le premier paramètre que je passe à la méthode Delegate.create est "this", correspondant à la portée de la scène.

    Donc la sortie donnera :

    _level0
    _level0.mc
    hello, , world
    undefined

    le dernier est indéfini, car _level0._parent n'existe pas.

    Le Delegate est vraiment très utile, et permet de rendre ton code bien plus clair et épuré que lorsque tu dois toujours faire des appels à this._parent pour atteindre des éléments.


    Bon courage et bons tests


    A++

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    merci pour l'explication , en fait ca al'air relativement complexe les niveaux d'autant plus que tout est généré dans le code et rien en graphique, donc je n'arrive pas forcément à me repérer

    Donc j'ai bien mis mc comme variable

    par contre si je stock Occ[j][1] dans une variable t, avec la meme hiérarchie il me sort la dernière entrée:

    avant le rollover:
    dans le rollover de mc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    trace(this._parent.Occ[j][1]) //--> undefined
    trace(this._parent.t) //--> Dernière entrée (puisqu'il écrase tout)

  14. #14
    Membre averti Avatar de titouille
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    353
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 353
    Points : 356
    Points
    356
    Par défaut
    Tu vois, déjà tu as compris que t est écrasé à chaque fois et que c'est normal d'obtenir la dernière valeur

    Pour ce que tu cherche à faire, je ferai comme suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    var mc = Occ[j][0];
     
    // ensuite, toutes les valeurs, je les mémorise dans mon mc :
     
    mc.titre = Occ[j][1];
    mc.rubrique = Occ[j][2];
    mc.desc = Occ[j][3];
    puis ensuite, dans les gestionnaires, tu peux les récupérer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    mc.onRollOver = function()
    {
    trace( this.titre );
    trace( this.rubrique );
    trace( this.desc );
    }
    Et là, tu es sur que les bonnes valeurs sont affectées aux bons mc.

    A++

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    et titre, rubrique et desc on peut les manipuler comme on veut? ce seont de sméthodes?

    En tout cas, merci beaucoup!
    Je suis un peu un boulet en flash mais j'ai énormément appris grâce à toi!!! j'espère pouvoir en faire autant quand je maitriserai mieux le langage!!

  16. #16
    Membre averti Avatar de titouille
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    353
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 353
    Points : 356
    Points
    356
    Par défaut
    ce ne sont pas des méthodes mais des variables membres.

    En fait, à la base, l'ActionScript n'est pas fortement typé, comme par exemple le C++.
    Donc tu peux affecter à n'importe quel type d'objet à peu près n'importe quel type de données...

    par exemple, lorsque tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mc.onRollOver = function() { ... }
    tu affecte une fonction au movieClip. Ici, c'est une fonction existante (définie à undefined par défaut), donc tout roule. Mais tu pourrai tout à fait affecter une fonction personnalisée que tu appelera quand tu veux. par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mc.counter = 0;
    mc.refreshCounter = function() { this.counter++; }
    et chaque fois que tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mc.refreshCounter() tu incrémente la valeur de "counter" de 1.
    Tu peux affecter des variables et des méthodes sans problème, et les manipuler ensuite comme tu veux (mais il ne faut jamais oublier la portée sur laquelle tu te trouve )

    Pour te donner un exemple concrèt, tu pourrais faire semblant que tes propriétés "titre", "desc" et "rubrique" sont des membres privés, donc tu n'y accède pas directement, mais tu crée des fonctions membres pour y accéder :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mc.getTitre = function() { return this.titre; };
    mc.setTitre = function( valeur ) { this.titre = valeur };
    et tu peux accéder à la valeur titre en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    trace( mc.getTitre() );
    mc.setTitre( "nouveau titre" );
    trace( mc.getTitre() );
    Par contre, si tu fais de l'AS2, qui lui peut être fortement typé, tu dois créer une classe qui va hériter de movieClip et l'affecter à ton mc, pour qu'il puisse contenir d'autre données et fonctions membres que celles qui sont existantes à la base (toutes les propriétés et fonctions natives de la classe movieClip).


    Voilà, en espérant que ça te mette sur la bonne voie

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Mysql] Donnée XML >vers> BDD
    Par largiss dans le forum XQUERY/SGBD
    Réponses: 14
    Dernier message: 28/02/2017, 17h51
  2. [FLASH MX2004] [XML] Lecture de données XML
    Par ZiT dans le forum Flash
    Réponses: 1
    Dernier message: 12/07/2005, 11h51
  3. Où est l'Expert Liaison de données XML [BCB6]
    Par Colloc dans le forum C++Builder
    Réponses: 3
    Dernier message: 21/02/2005, 14h33
  4. [xml]manipuler des données xml sous Oracle9i
    Par crazy dans le forum SQL
    Réponses: 7
    Dernier message: 28/02/2004, 11h40
  5. problème xsl : inclure une donnée xml dans une balise html
    Par djodjo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/01/2003, 09h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo