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 13/09/2007, 16h11   #1
Invité de passage
 
Inscription : septembre 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 7
Points : 1
Points : 1
Par défaut swf dans ScrollPane faudrait qu'ça cause !

Bonjour,

Je charge un fichier swf (detail.swf) dans le ScrollPane d'un autre fichier SWF. (general.swf)

Donc j'ai general.swf qui charge detail.swf.

Bon, je voudrais que detail.swf puisse aller récupérer une information dans general.swf ou
que general.swf envoie une info à detail.swf.

Les variable _global n'existent plus en AS3.
J'ai essayé en remontant avec parent... comme je le faisait en AS2 (_parent) mais ça veut pas.
Je me suis amusé avec LocalConnection() mais sans résultat...

Je sais pas quoi faire, et je voudrais juste récupérer le contenu d'une variable.

Si qq'un à une idée, je suis preneur,

MERCI

Raydu
raydu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 18h15   #2
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
Si tu vois ton swf à l'écran, c'est qu'il est chargé. Y'a pas de raison, que tu puisses pas reconstruire le chemin de ta variable avec parent.

Mais tu as écrit _parent ??... c'est un code AS2...

T'es en AS2 ou AS3?

Sinon, pour l'AS3, on avait discuté d'un problème similaire à:
http://www.developpez.net/forums/sho...d.php?t=400454

tu trouveras entre autre une méthode qui te permet de reconstruire le chemin de tes clips.
David Buff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 18h23   #3
Invité de passage
 
Inscription : septembre 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 7
Points : 1
Points : 1
Merci pour ta réponse,

Je suis en AS3, et je suis bien passe par parent.

j'ai commencé à regardé le lien que tu m'as fournis et ça à l'air de le faire !

MERCI
raydu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2007, 01h42   #4
Invité de passage
 
Inscription : septembre 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 7
Points : 1
Points : 1
Bon, un p'tit point avant d'aller se coucher...
Parce que j'y suis pas encore ! Vraiment pas.
J'ai essayé deux méthodes.

1) La première charge le fichier au bon endroit mais je ne peux pas accéder à ce que je veux,
2) La seconde je peux accéder à ce que je veux, mais le fichier ne se charge pas dans le scrollPan

Méthode 1 :

Action Script :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
// un p'tit ScrollPan 
var sp:ScrollPane = new ScrollPane(); 
sp.move(10,190); 
sp.name = "leScroller"; 
sp.setSize(530,400); 
addChild(sp); 
 
function swfCharge(e:Event):void 
{ 
   // C'est là que je m'en sort pas, car je voudrais exécuté 
   // une fonction  dans le fichier chargé en lui 
   // passant une valeur à partir de CE fichier...  
   // mais je n'arrive pas à attreindre ma fonction, 
   // je n'ai que des erreurs. 
} 
 
sp.addEventListener(Event.COMPLETE, swfCharge); 
//sp.addEventListener(Event.INIT, swfCharge); 
sp.load(new URLRequest(path));
soit je passe par un Loader

Méthode 2 :

Action Script

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
var swfLoader:Loader = new Loader();
swfLoader.contentLoaderInfo.addEventListener(Event.INIT, swfChargeLOAD);
swfLoader.load(new URLRequest(path));
 
sp.addChild(swfLoader);
 
function swfChargeLOAD(eventObj:Event):void
{
	var loader:Loader = Loader(eventObj.target.loader);
	var info:LoaderInfo = LoaderInfo(loader.contentLoaderInfo);
 
	trace("swfLoader info.content : " + info.content + " - " + info.loaderURL);
 
	var myContent:MovieClip = MovieClip(info.content);
	myContent.chargeDetail(fichierActif);
}

Et là, c'est bien ;
je charge le fichier externe,
j'appel la fonction "chargeDetail()" et lui passe un paramètre...
mais impossible de faire que cela s'affiche dans le ScrollPane !

Ca énerve un peu en fin d'journée comme ça...

Mais bon, la nuit porte conseil, et je lance un appel aux insomniaques qui ont qq idées sur le sujet...

D'avance MERCI

raydu
raydu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2007, 10h31   #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
Arf... y'a plusieurs choses qui me viennent à l'esprit:

- J'ai déjà eu un problème d'accès à des variables internes de SWF avec le Event.INIT. En fait, au moment où Event.INITdéclanche ta méthode en fin de chargement, parfois, les données ne sont pas encore disponibles. Je pense que ça vient d'une décompression asynchrone du SWF. Il faut attendre quelques frames avant de tenter d'accéder aux données du SWF. Pour vérifier si c'est ça ton problème, déclanche swfCharge à partir d'un bouton sur lequel tu cliques plutôt qu'avec le Event.INIT. Ou alors essaye un truc dans le genre:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var count:uint = 0;
var storeEvent:Event;
 
function swfChargeWait(e:Event):void {
   storeEvent = e;
   sp.addEventListener("enterFrame", swfChargeFrame);
}
 
function swfChargeFrame(e:Event):void {
   count++;
   if (count>100) {
      sp.removeEventListener("enterFrame", swfChargeFrame);
      swfCharge(storeEvent)
   }
}
 
function swfCharge(e:Event):void {
   // ton traitement ici
}
 
sp.addEventListener(Event.INIT, swfChargeWait); 
sp.load(new URLRequest(path));
T'as peut-être même pas besoin de storeEvent...
Si ça marche, c'est que c'est bien ce problème. Je t'expliquerai une meilleure méthode.

-Sinon, tu dois pouvoir charger ton SWF sous forme binaire avec un URLLoader, et forcer le contenu de ton ScrollPane pour qu'il considère comme content ce que tu as chargé avec le URLLoader... mais on va déjà essayer la première solution hein ?
David Buff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2007, 11h22   #6
Invité de passage
 
Inscription : septembre 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 7
Points : 1
Points : 1
Merci pour ta réponse,

Je viens de mettre cela en pratique mais ça ne donne rien.

J'aimerais arriver à garder la méthode de chargement avec le Loader
Code :
1
2
 
var swfLoader:Loader = new Loader();
Mais le soucis est de ne pas réussir à mettre ça dans le scrollPane ! J'suis un peu perdu. (pourquoi un peu ?)

Sinon, je suis en trina décortiquer la Class ScrollPane pour essayer de voir comment mettre ça dedans... c'est pas gagné

...

Moza
raydu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2007, 11h50   #7
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
C'est quoi les erreurs que t'as? quel type (n° et message de console)?
David Buff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2007, 12h11   #8
Invité de passage
 
Inscription : septembre 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 7
Points : 1
Points : 1
Je n'ai pas de messages d'erreur !

J'ai simplement le soucis une fois que le SWF est chargé (DANS le scrollPane) de ne pas réussir à exécuté une fonction qui se trouve DANS le swf chargé.

En fait je n'arrive pas à l'atteindre ce SWF...

-----------

Le seul cas où j'arrive à l'atteindre c'est en passant par Loader mais là il ne se charge pas dans le scrollPan.

???
raydu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2007, 15h04   #9
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
Hummm... un truc m'échappe... ça doit pas être vraiment compliqué, mais j'arrive pas à identifier ton problème... normalement, en as3, si tu appelles un propriété ou une méthode avec un chemin qui est faux, ça doit te générer une erreur dans la fenêtre de trace... l'erreur permetrait de cibler le problème... je comprends pas que tu n'aies rien... tu es sûr de faire l'appel?

Arf... je sais pô comment t'aider...
David Buff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2007, 15h31   #10
Invité de passage
 
Inscription : septembre 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 7
Points : 1
Points : 1
Alors tout d'abord MERCI pour ton aide !
Vraiment.

Le problème c'est que des Erreurs j'en plein... ça dépdend de ce que je fait !

Ce que je veux faire, c'est appelé une fonction qui est dans le fichier chargé (à savoir chargeDetail() )
Mais lorsque j'essaie de l'appeler à partir du fichier principal

Code :
1
2
3
4
5
 
function swfCharge(e:Event):void {
      // Mettre ici le code qui appel la fonction 
      // DANS le fichier chargé
}
j'ai une erreur :

1180: Appel à une méthode qui ne semble pas définie, chargeDetail().

Et je n'arrive pas à trouver le chemin jusqu'à cette fonction !

Le seul cas où j'ai réussi à appelé la fonction c'était en faisant :

Code :
1
2
 
var swfLoader:Loader = new Loader();
Maios là je n'arrive pas à charger mon SWF dans le scrollPane.

Donc si tu as une idée de comment TROUVER le chemin pour appeler la fonction en utilisant le code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
// un p'tit ScrollPan 
var sp:ScrollPane = new ScrollPane(); 
sp.move(10,190); 
sp.name = "leScroller"; 
sp.setSize(530,400); 
addChild(sp); 
 
function swfCharge(e:Event):void 
{ 
   // C'est quoi le chemin vers ma fonction ???
} 
 
sp.addEventListener(Event.COMPLETE, swfCharge); 
//sp.addEventListener(Event.INIT, swfCharge); 
sp.load(new URLRequest(path));
Je t'avoue que je suis en train de réfléchir à une autre solution d'affichage que le scrollPane car je ne m'en sort pas, et d'un autre côté je n'aime pas laissé un truc incompris derrière moi...

Raydu
raydu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2007, 18h16   #11
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
Rhaa !! j'ai trouvé !! le chemin de ta fonction c'est:

sp.content["chargeDetail"]();

j'explique plus tard...
David Buff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2007, 18h26   #12
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
ça c'est le code de la classe document du swf que tu charges:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package {
 
	import flash.display.MovieClip;
 
	public class MySWFToLoad extends MovieClip{
 
		public function MySWFToLoad() {
			trace("MySWFToLoad créé");
		} // end constructor
 
		public function chargeDetail():String {
			return "Ca marche !!";
		} // end chargeDetail
 
	} // end class
} // end package
J'ai appelé le fichier AS de la classe document "MySWFToLoad.as" et le document flash "SwfToLoad.fla"

Ensuite, ça c'est le code de la classe document qui charge:
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
package {
 
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.net.URLRequest;
	import fl.containers.ScrollPane;
 
	public class MyLoader extends MovieClip {
 
		public function MyLoader() {
			trace("MyLoader créé");
 
			var sp:ScrollPane = new ScrollPane(); 
			sp.move(10,190); 
			sp.name = "leScroller"; 
			sp.setSize(530,400); 
			addChild(sp); 
 
			function swfCharge(e:Event):void {
				trace("C'est chargé !! ça devrait être créé");
				trace("Tentative: "+sp.content["chargeDetail"]());
 
				// parce qu'en fait il faudrait écrire
				var myContent:MySWFToLoad = MySWFToLoad(sp.content);
				trace("Solution: "+myContent.chargeDetail());
			} // end swfCharge
 
			sp.addEventListener(Event.COMPLETE, swfCharge); 
			//sp.addEventListener(Event.INIT, swfCharge); 
			sp.load(new URLRequest("SwfToLoad.swf"));
 
		} // end constructor
 
	} // end class
} // end package
c'est parce que par défaut, ScrollPane.content est casté DisplayObject, or DisplayObject n'a pas de méthode chargeDetail()... donc ça génère une erreur. Il faut donc soit forcer le chemin en mode runTime avec ["chargeDetail"]() ce qui n'est pas très propre, soit caster DisplayObject.content avec le type de la classe document que tu as créé pour ton swf chargé... puisque cette classe document, elle, a bien une méthode chargeDetail(). Donc, pas d'erreur.

Donc tu crées une variable du type de la classe document que tu charges, ici myContent, qui contiendra donc ta méthode, et tu cast le contenu de DisplayObject.content pour le forcer à adopter ce type...

En fait, c'est une erreur classique... mais j'avais pô vu.
En essayant, du coup, ça m'est revenu

ouf !!
David Buff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2007, 12h27   #13
Invité de passage
 
Inscription : septembre 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 7
Points : 1
Points : 1
Par défaut Respect ô grand David Buff

Franchement trop fort !

Ca roule super.

J'ai dû me familiariser avec deux trois trucs, mais ton code c'est la balle !

champion du monde

1000 mercis.

Raydu
raydu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2007, 11h20   #14
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
Par défaut [Résolu]

Mais c'est un plaisir, de rien !
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 05h32.


 
 
 
 
Partenaires

Hébergement Web