Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS1/AS2
AS1/AS2 Questions relatives à la programmation ActionScript 1 et 2 (Cours AS2)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/12/2006, 22h18   #1
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
Par défaut [FLASH 8] Problème utilisation MovieClipLoader

salut,
c'est un script pourcharger des images à partir d'un fichier xml.
Le chargement est ok.
Mais j'ai un souci dans la fonction makeStrip();
Mes images ne se chargent pas...

Code :
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
 
var path:String;
var imgSrc:Array = new Array();
var imgTitle:Array = new Array();
var listen:Object = new Object();
var mc:MovieClipLoader = new MovieClipLoader();
mc.addListener(listen);
 
 
function loadXml(dir:Number){
...
}
 
function makeStrip(){
	for(var i:Number=0;i<imgSrc.length;i++){
		var newMc:String = "mc" + i;
		mc = createEmptyMovieClip(newMc,this.getNextHighestDepth());	
 
		listen.onLoadInit = function(){
			this._x = 100;
			this._height = 400;		
			trace(this);			
		}
		mc.loadClip(path + imgSrc[i],newMc);
	}
}
 
loadXml(2);
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2006, 01h08   #2
Membre expérimenté
 
Inscription : octobre 2006
Messages : 642
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 642
Points : 599
Points : 599
Essaye de modifier cette ligne:
Citation:
mc = createEmptyMovieClip(newMc,this.getNextHighestDepth());
par

Citation:
mc = createEmptyMovieClip(this[newMc],this.getNextHighestDepth());
melonmaudic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 14h49   #3
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
j'ai essayé, mais pareil.
Si j'ajoute 'trace(mc);' après
Code :
mc = createEmptyMovieClip(newMc,this.getNextHighestDepth());
J'obtiens :
Code :
1
2
3
4
5
6
7
8
_level0.mc0
_level0.mc1
_level0.mc2
_level0.mc3
_level0.mc4
_level0.mc5
_level0.mc6
...
tous sont sur le level 0...
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 14h54   #4
Membre expérimenté
 
Inscription : octobre 2006
Messages : 642
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 642
Points : 599
Points : 599
Ce que tu veux ou pas?
melonmaudic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 15h02   #5
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
Citation:
Ce que tu veux ou pas?
bah non, je veux pouvoir les voir sur ma scène simultanément, donc je pense qu'il faut qu'ils aient un niveau différent. Je pensais que ça serait le cas en utilisant :
Code :
this.getNextHighestDepth()
Est ce pour cela que mes images ne se chargent pas dans mes clips?
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 15h09   #6
Membre expérimenté
 
Inscription : octobre 2006
Messages : 642
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 642
Points : 599
Points : 599
Je sais pas, je suis pas un pro en flash, mais j'aurais fait ça:

Citation:
function makeStrip(){
for(var i:Number=0;i<imgSrc.length;i++){
var newMc:String = "mc" + i;
mc = createEmptyMovieClip(this[newMc], i);

listen.onLoadInit = function(){
this._x = 100;
this._height = 400;
//trace(this);
}
mc.loadClip(path + imgSrc[i],newMc);
}
}

loadXml(2);
melonmaudic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 15h09   #7
Membre expérimenté
 
Inscription : octobre 2006
Messages : 642
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 642
Points : 599
Points : 599
Ce que j'ai changé finalement à ton code:

Citation:
mc = createEmptyMovieClip(this[newMc], i);
melonmaudic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 15h24   #8
Membre Expert
 
Avatar de Lorenzo77
 
Inscription : mai 2006
Messages : 1 294
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 1 294
Points : 1 220
Points : 1 220
-le 2eme parametre de "loadClip" doit etre une occurence d'un MC existant et non une chaine
-ensuite "loadClip" est une méthode de "movieClipLoader" et pas de "movieClip"
-pour finir si le but est de charger des images en cascade, j'utiliserais plutot une fonction récursive, exemple extrait et adapté d'une classe qui me fait le taf de chargement en cascade pour gerer des "albums" :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
function chargerImg() {
	if (nbIdImg > tbImg.length - 1) {
		return;
	}
	var mc = this.createEmptyMovieClip("mcImg" + nbIdImg, nbIdImg);
 
	mclTmp = new MovieClipLoader();
 
	mclTmp.onLoadInit = function() {
		trace("Chargement réussi de "+tbImg[nbIdImg]);
		nbIdImg++;
		// je rappelle cette fonction quand l'image précédente est chargé
		// prévoir le coup en cas d'erreur apres X tentatives
		chargerImg();
	};
 
	mclTmp.loadClip(stChemin + tbImg[nbIdImg], mc);
}
Lorenzo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 15h59   #9
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
salut,
j'ai essayé de reprendre ton code, mais je dois dire que je n'ai pas encore perçé tous les mystères de l'AS2...

Code :
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
49
class strip extends MovieClip{
    public var path:String;
    public var imgSrc:Array = new Array();
    public var imgTitle:Array = new Array();
	public var container:MovieClip;
	public var numImg:Number = 0;
	public var mclTmp:MovieClipLoader;
	public var listen:Object = new Object();
	
    public function strip (dir:Number){
		path = '../photos/' + dir + '/';
		mclTmp.addListener(listen);
        loadXml();
    }
    
    public function loadXml(){
        var x:XML = new XML();
        x.ignoreWhite = true;
        var _this=this;
        x.onLoad = function(){
            var xmlResult:Array = this.firstChild.childNodes;
            for(var i:Number=0;i<xmlResult.length;i++){
                _this.imgSrc.push(xmlResult[i].attributes.src);
                _this.imgTitle.push(xmlResult[i].attributes.title);                
            }
            _this.chargerImg();
        }
        x.load(path + 'gallery.xml');
    }
    
	
	function chargerImg() {
		trace('1- ' +  imgSrc.length);
		trace('2- ' +  numImg);		
		if (numImg > imgSrc.length - 1) {return;}
		var mc = this.createEmptyMovieClip("mcImg" + numImg, numImg);
		trace('3- ' +  mc);
		var mclTmp = new MovieClipLoader();
		trace('4- ' +  mclTmp);
		mclTmp.onLoadInit = function() {
			trace("Chargement réussi de "+imgSrc[numImg]);
			numImg++;
			chargerImg();
		};
	
		mclTmp.loadClip(path + imgSrc[numImg], mc);
	}
}
j'ai étendu ma classe avec MovieClip, est ce correct?
les traces me renvoient ceci :
Code :
1
2
3
4
1- 14
2- 0
3- undefined
4- [object Object]
Pourquoi mc est undefined ?
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 19h32   #10
Membre Expert
 
Avatar de Lorenzo77
 
Inscription : mai 2006
Messages : 1 294
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 1 294
Points : 1 220
Points : 1 220
j'ai completement modifié mon exemple pour qu'il ne ressemble plus a une méthodes et tu preferes tout integrer dans une classe ??
si j'etais toi, avant d'aller aussi loin, je commencerais par tester une simple fonction récursive dans mon SWF en oubliant toutes les idées de classe externe car il y a pas mal de principe que tu ignores au niveau des classes, ex : this fait TOUJOURS référence a la classe, donc le :
this.createEmptyMovieClip(.......
ne peut pas fonctionner car tu cibles une classe et non un clip.

commence par faire fonctionner quelque chose de simple pour bien comprendre avant de t'attaquer a plus gros car avec les classes tu te rajoutes une bonne dose de difficulté
Lorenzo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 21h27   #11
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
Citation:
j'ai completement modifié mon exemple pour qu'il ne ressemble plus a une méthodes et tu preferes tout integrer dans une classe ??
oups désolé , en fait je suis plus habitué à php où je trouve le classes très partique. Je me disais qu'en c'est en essayant que je comprendrais mieux le classes en AS2. C'est en partie vrai, mais il me reste pas mal de chose encore... Enfin déjà, ce que tu as dit, que le this fait toujours référence à la classe est une info très précieuse... Est ce que tu connais des bons tutos sur les classes ou de bons bouquins pour AS2.

sinon en suivant tes conseils, j'ai plutot fait avec des fonctions. Et ça marche (pas parfaitement mais c'est déjà mieux)
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2006, 21h50   #12
Membre Expert
 
Avatar de Lorenzo77
 
Inscription : mai 2006
Messages : 1 294
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 1 294
Points : 1 220
Points : 1 220
l'essentiel est de bien comprendre le principe avant de tout integrer dans des classes.
pour les tutos, voici les + interessant.
tout ce site : le principe de la POO est + ou - le meme pour tous les languages meme s'il peut y avoir des différences dans l'implementation des fonctionnalités (il parrait que les meilleurs en POO sont ceux qui ont commencés sur JAVA !?)
[I]http://flash.developpez.com/cours/
http://arnolem.developpez.com/flash/classes/

et sinon :
http://blog.lalex.com/
http://www.tweenpix.net/blog/
le site d'adobe
et comme toujours l'aide de flash mais qui est tres limité ...
Lorenzo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2006, 13h34   #13
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
ok, je vais me pencher là dessus attentivement.
Merci pour ton aide.
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h54.


 
 
 
 
Partenaires

Hébergement Web