Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS3
AS3 Questions relatives à la programmation ActionScript 3 (Cours AS3)
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 20/01/2008, 13h46   #1
Invité de passage
 
Inscription : janvier 2008
Messages : 2
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 2
Points : 1
Points : 1
Par défaut Problème chargement swf externe

Bonjour à tous.
Alors, je vais essayer de décrire clairement mon souci :

Tout d'abord, mon swf 'mère' charge des swf externes, avec :
Code :
1
2
3
4
5
6
 
var chargeur:Loader = new Loader(); 
chargeur.load(new URLRequest("/liveABBA.swf")); 
chargeur.x = 100 ; 
chargeur.y = 200 ; 
stage.addChild(chargeur);
OK, ça, ça marche.

Maintenant, à l'intérieur de chaque swf externe, j'ai un préloader avec le code suivant (le même code est d'ailleurs utilisé sur la 1e frame de mon swf principal) :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
stop(); 
loaderInfo.addEventListener(Event.COMPLETE, onComplete); 
loaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); 
 
function onComplete(evt:Event){ 
         gotoAndStop(2); 
} 
 
function onProgress(evt:ProgressEvent){ 
         barre.scaleX = evt.bytesLoaded  / evt.bytesTotal; 
}
ça aussi ça marche ! ok. Mais là où l'incompréhension commence, c'est maintenant :dans mon swf principal, j'ai une série de boutons qui me charge chacun un swf externe distinct. Le problème est le suivant : quand je clique sur le bouton qui va charger un autre swf dans le loader, j'ai alors le message d'erreur suivant :

TypeError: Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.
at xxxxx_fla::MainTimeline/onProgress()

Sachant que le "xxxx_fla" est le swf qui avait été initialement chargé dans le loader... Je veux dire par là, que le premier swf externe se charge normalement, et dès que je clique sur un autre bouton pour en charger un autre, j'ai le message d'erreur ci-dessus...

Si quelqu'un peut m'aider, ce serait très sympa. Merci d'avance.
BEnttc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2008, 15h00   #2
Nouveau Membre du Club
 
Inscription : décembre 2007
Messages : 32
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : décembre 2007
Messages : 32
Points : 34
Points : 34
Envoyer un message via MSN à rockntrek
Salut !

Je dois dire que c'est la première fois que je vois cette façon de faire pour charger une animation externe...
Moi je place les écouteurs sur le Loader et non sur l'animation en train de charger.

Voilà comment j'aurai procédé :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
var chargeur:Loader = new Loader(); 
var castLoader:MovieClip = new MovieClip();
 
chargeur.x = 100 ; 
chargeur.y = 200 ;
 
chargeur.load(new URLRequest("liveABBA.swf")); 
 
chargeur.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressionChargement);
chargeur.contentLoaderInfo.addEventListener(Event.COMPLETE, chargementFini);
 
function  progressionChargement (evt:ProgressEvent):void{
barre.scaleX = evt.bytesLoaded  / evt.bytesTotal;
}
 
function chargementFini (evt:Event):void{
castLoader = chargeur.content;
this.addChild(castLoader);
castLoader.nextFrame();
 
}
Ça reste à vérifier, je sais que pour pouvoir communiquer avec une animation externe chargée dans un Loader, il faut caster ce même loader en MovieClip.
rockntrek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2008, 17h02   #3
Invité de passage
 
Inscription : janvier 2008
Messages : 2
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 2
Points : 1
Points : 1
Par défaut suite...

Merci pour l'info. Je ne savais pas qu'il fallait placer les écouteurs sur le Loader et non sur l'animation en train de charger... Merci.

J'ai donc fait la manip' que tu me conseilles, mais j'ai maintenant un message d'erreur au moment de l'exécution de :
Code :
castLoader = chargeur.content;
=>
"
1118: Contrainte implicite d'une valeur du type statique flash.displayisplayObject vers un type peut-être sans rapport flash.display:MovieClip.
"
...

Et là, bah je suis perdu...
BEnttc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2008, 13h30   #4
Nouveau Membre du Club
 
Inscription : décembre 2007
Messages : 32
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : décembre 2007
Messages : 32
Points : 34
Points : 34
Envoyer un message via MSN à rockntrek
Oui, ça semble logique que les écouteurs soient placés sur le Loader. On écoute la progression du chargement du contenu du Loader et lorsqu'il est complètement chargé.

Sinon, comme je te l'ai dit j'avais un doute au niveau du cast du Loader. J'ai regardé, et, effectivement, ce n'est pas la bonne syntaxe à utiliser. La fonction devrait fonctionner de cette manière :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
function chargementFini (evt:Event):void {
 
    // Cast du Loader en MovieClip
    castLoader = evt.target.content as MovieClip;
 
    // Ajout de castLoader à la displayList
    this.addChild(castLoader);
 
    // Repositionnement de la tête de lecture de castLoader
    castLoader.nextFrame();
}
Normalement, tu ne devrais plus avoir d'erreurs...
rockntrek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 11h20   #5
Membre actif
 
Inscription : avril 2007
Messages : 126
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2007
Messages : 126
Points : 150
Points : 150
Tu peux aussi caster comme ça:
Code :
castLoader = MovieClip(evt.target.content);
Sinon, pour ta toute première question...
En fait il ne faut jamais oublier qu'un chargement est une opération asynchrone. Ainsi, quand on lance le chargement, on ne peut pas forcément accéder à l'objet tout de suite. De même, quand un chargement est terminé, on ne peut pas toujours accéder aux données contenues tout de suite, mais il faut parfois attendre 2 ou 3 frames la décompression du swf pour "entrer dedans".
Quand tu as une erreur sur un chargement à propos d'une référence à un objet null, c'est souvent que tu tentes d'accéder à un objet qui n'existe pas encore. Souvent, il suffit d'attendre 2 ou 3 frames pour que cela devienne possible.
David Buff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2008, 11h58   #6
Membre actif
 
Inscription : avril 2007
Messages : 126
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2007
Messages : 126
Points : 150
Points : 150
Et puis tu as un tutoriel à:
http://pyrrha.developpez.com/article...s3/chargement/
David Buff 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 05h42.


 
 
 
 
Partenaires

Hébergement Web