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 08/08/2007, 17h25   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 64
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 64
Points : 10
Points : 10
Par défaut Swap animations :: supprimer/remplacer

Bonjour,

Récent migrant vers AS3, je réussis à utiliser la classe .Loader pour afficher des swf externes... J'in un swf de départ vide qui charge le premier *.swf, et depuis celui-ci, je voudrais pouvoir le remplacer par un autre, au clic... Le clic c'est que mon code fait se superposer les *swf les uns par-desus les autres sans que le précédent soit effacé. Bref... Que faire?

index.fla:

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
50
51
52
53
/*var mc=_root.createEmptyMovieClip('container');
loadMovie('stage_3.swf',container);*/
 
// import des classes nécessaires :
// nous importons les classes necessaires :
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLLoaderDataFormat;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.events.IOErrorEvent;
 
// nous déclarons un objet URLLoader :
var container:URLLoader = new URLLoader ();
 
// nous créons un objet URLRequest qui contient l'url du fichier :
var adresse:URLRequest = new URLRequest ("stage_3.swf");
 
// nous lançons le chargement du fichier, en indiquant l'adresse de celui ci par l'objet URLRequest :
container.dataFormat = URLLoaderDataFormat.BINARY;
container.load(adresse);
 
// définition des événements de l'objet container
container.addEventListener(Event.COMPLETE, finDuChargement);
container.addEventListener(ProgressEvent.PROGRESS, avancement);
container.addEventListener(IOErrorEvent.IO_ERROR, indiquerErreur);
 
// définition de la fonction éxecutée par l'événement COMPLETE :
// ( déclenchée lorsque le chargement se termine )
function finDuChargement ( event:Event ) {
	var contenu = event.target.data;
	creerLoader (contenu);
}
 
// fonction déclenchée à la fin du chargement URLLoader, qui ajoute un Loader sur la scene :
function creerLoader ( datas ) {
		var container:Loader = new Loader();
		container.loadBytes(datas);
		stage.addChild(container);
} 
 
// définition de la fonction éxecutée par l'événement PROGRESS :
// déclenchée à chaque avancement du chargement )
function avancement( event:Event) {
	trace(event.target.bytesLoaded+" chargés sur "+event.target.bytesTotal);
}
 
// fonction indiquant si une erreur de chargmement survient :
function indiquerErreur( event:Event ) {
	trace(event);
}
stage_3.fla:

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// import des classes nécessaires :
// nous importons les classes necessaires :
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLLoaderDataFormat;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.events.IOErrorEvent;
 
// nous déclarons un objet URLLoader :
var container:URLLoader = new URLLoader ();
 
// nous créons un objet URLRequest qui contient l'url du fichier :
//var adresse:URLRequest = new URLRequest ("image.jpg");
 
// nous lançons le chargement du fichier, en indiquant l'adresse de celui ci par l'objet URLRequest :
container.dataFormat = URLLoaderDataFormat.BINARY;
//container.load(adresse);
 
// définition des événements de l'objet container
container.addEventListener(Event.COMPLETE, finDuChargement);
container.addEventListener(ProgressEvent.PROGRESS, avancement);
container.addEventListener(IOErrorEvent.IO_ERROR, indiquerErreur);
 
// définition de la fonction éxecutée par l'événement COMPLETE :
// ( déclenchée lorsque le chargement se termine )
function finDuChargement ( event:Event ) {
	var contenu = event.target.data;
	creerLoader (contenu);
}
 
// fonction déclenchée à la fin du chargement URLLoader, qui ajoute un Loader sur la scene :
function creerLoader ( datas ) {
		var container:Loader = new Loader();
		container.loadBytes(datas);
		stage.addChild(container);
} 
 
// définition de la fonction éxecutée par l'événement PROGRESS :
// déclenchée à chaque avancement du chargement )
function avancement( event:Event) {
	trace(event.target.bytesLoaded+" chargés sur "+event.target.bytesTotal);
}
 
// fonction indiquant si une erreur de chargmement survient :
function indiquerErreur( event:Event ) {
	trace(event);
}
 
fleche.addEventListener(MouseEvent.CLICK,onClick);
 
function onClick(e:MouseEvent):void {
	var adresse:URLRequest = new URLRequest ("couloir.swf");
	//container.removechild();
	container.load(adresse);
}
 
/*fleche.onRelease=function(){
    container.load("couloir.swf");
}*/
 
/*bureau_1.onRelease=function(){
	loadMovie("piece_1.swf",container);
}
 
bureau_2.onRelease=function(){
	loadMovie("piece_2.swf",container);
}*/
lemilig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2007, 15h41   #2
Rédacteur
 
Avatar de loka
 
Homme Romain PERRUCHON
Architecte - Expert Technique
Inscription : novembre 2004
Messages : 2 664
Détails du profil
Informations personnelles :
Nom : Homme Romain PERRUCHON
Âge : 30
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Architecte - Expert Technique
Secteur : Service public

Informations forums :
Inscription : novembre 2004
Messages : 2 664
Points : 3 607
Points : 3 607
Bonjour,

Il te faut effacer le precedent avec un removeChild() par exemple.
__________________
SFML - API Multimédia C++ multiplateforme !
loka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2007, 09h46   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 64
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 64
Points : 10
Points : 10
J'ai déjà essayé ça mais il y a un problème...

Dans la fonction destinée à gérer le remplacement de l'animation au clic, je place la ligne:
Code :
container.removeChild(adresse);
Ce qui donne:

fleche.addEventListener(MouseEvent.CLICK,onClick);

Code :
1
2
3
4
5
function onClick(e:MouseEvent):void {
	container.removeChild(adresse);
	var adresse:URLRequest = new URLRequest ("couloir.swf");
	container.load(adresse);
}
Mais j'obtiens un message d'erreur de compilation:
Code :
1
2
 
Appel à la méthode removeChild non définie, via la référence de type static flash.net: URLloader.container.removeChild(adresse)
Kesako???
lemilig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2007, 10h45   #4
Rédacteur
 
Avatar de loka
 
Homme Romain PERRUCHON
Architecte - Expert Technique
Inscription : novembre 2004
Messages : 2 664
Détails du profil
Informations personnelles :
Nom : Homme Romain PERRUCHON
Âge : 30
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Architecte - Expert Technique
Secteur : Service public

Informations forums :
Inscription : novembre 2004
Messages : 2 664
Points : 3 607
Points : 3 607
Ton container est un URLLoader et un removeChild n'est pas défini pour un type URLLoader.

http://livedocs.adobe.com/flash/9.0_...l#removeChild()

Sur quoi as tu fais un addChild() pour le premier swf ?
__________________
SFML - API Multimédia C++ multiplateforme !
loka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2007, 11h02   #5
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 64
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 64
Points : 10
Points : 10
OK je commence à cerner le problème...

En fait j'ai un premier fichier nommé index.fla dans lequel je crée un URLloader nommé container.

Code :
var container:URLLoader = new URLLoader ();
Puis j'appelle ma première animation grâce à URLRequest:

Code :
var adresse:URLRequest = new URLRequest ("stage_3.swf");
Puis je place tout simplement un load sur le container:

Code :
container.load(adresse);
Bref, dans cette deuxième animation, je place sur mes boutons le code censé remplacer "stage_3.swf" à l'intérieur de 'container' au sein de "index.swf"... Vous me suivez?

Qyuant à moi, si je suis un peu, il semble que mes problèmes viennent du fait que j'utilise deux méthodes différentes pour introduire mes animations, c'est ça? Problème de conflit entre URLLoader et addchild? En tous cas je suppose que removeChild() ne risque pas de marcher si je ne suis pas passé auparavant par la case addChild(). C'est bien ça?
lemilig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2007, 12h35   #6
Rédacteur
 
Avatar de loka
 
Homme Romain PERRUCHON
Architecte - Expert Technique
Inscription : novembre 2004
Messages : 2 664
Détails du profil
Informations personnelles :
Nom : Homme Romain PERRUCHON
Âge : 30
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Architecte - Expert Technique
Secteur : Service public

Informations forums :
Inscription : novembre 2004
Messages : 2 664
Points : 3 607
Points : 3 607
Citation:
Envoyé par lemilig
Qyuant à moi, si je suis un peu, il semble que mes problèmes viennent du fait que j'utilise deux méthodes différentes pour introduire mes animations, c'est ça? Problème de conflit entre URLLoader et addchild? En tous cas je suppose que removeChild() ne risque pas de marcher si je ne suis pas passé auparavant par la case addChild(). C'est bien ça?
Correct.

Maintenant le problème reste que je ne me souviens plus comment faire dans ce cas là

Juste une proposition :
J'ai vu que tu faisais ça :
Code :
stage.addChild(container);
Tu peux essayer de faire un removeChild() là dessus et recommencer la même manipulation que tu as effectué pour ajouter le premier swf afin d'ajouter le second.
__________________
SFML - API Multimédia C++ multiplateforme !
loka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2007, 14h13   #7
Candidat au titre de Membre du Club
 
Inscription : mars 2007
Messages : 64
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 64
Points : 10
Points : 10
Humm.... Je vais plancher là-dessus... On va essayer de contourner l'URLLoader pour passer par addChild() etc... juste un truc, puisque mon conteneur est créé au niveau du fichier 'index', est-ce que je peux y faire à nouveu référence dans 'stage_3'? Il faut que j'utilise un truc du style '_parent' non?
lemilig est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h41.


 
 
 
 
Partenaires

Hébergement Web