Pourquoi mon swf chargé s'arrête-t-il quand j'interagis avec lui ?

[Résolu]
Signaler
Messages postés
22
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
24 novembre 2009
-
Messages postés
1375
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011
-
Bonjour

J’ai deux animations ultra basiques en AS3 (faites sous Flash CS3).
- La première (animation chargée.swf) ne contient qu’une bête animation graphique (une simple interpolation de mouvement sur un clip dont le nom d’occurrence est "vert").
- La seconde ne contient que le code ci-dessous.

var chargeur:Loader = new Loader();
var adresse:URLRequest = new URLRequest("animation chargée.swf");
chargeur.load(adresse);
addChild(chargeur);
stage.addEventListener(MouseEvent.MOUSE_DOWN,disparaitre);
function disparaitre(evt:MouseEvent)
{
MovieClip(chargeur.content).vert.alpha -= 0.3;
// ==> le clip Vert s'arrête !!! pourquoi ? En AS1, il continuait sa course.
}

Ma question est : pourquoi le fait de demander au clip "vert", qui a été chargé dans "animation chargée.swf", arrête son interpolation de mouvement ??? Il change bien son alpha comme prévu, mais en AS1 il aurait continué son interpolation en même temps. Pourquoi en AS3 ça ne le fait plus ? Une erreur de ma part ou faut-il faire cela différemment en AS3 ?

Merci par avance.

19 réponses

Messages postés
1375
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Désolé, je voulais dire MovieClip :-)


-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Messages postés
1375
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Hello,

il faut attendre que tout soit chargé avant d'intéragir avec ton clip chargé.

var chargeur:Loader = new Loader();
var adresse:URLRequest = new URLRequest("animation chargée.swf");
chargeur.load(adresse);

addChild(chargeur);

chargeur.addEventListener(Event.COMPLETE, chargeComplete);

function chargeComplete(e:Event):void
{
    chargeur.removeEventListener(Event.COMPLETE, chargeComplete);
    stage.addEventListener(MouseEvent.MOUSE_DOWN,disparaitre);
}

function disparaitre(evt:MouseEvent)
{
    MovieClip(chargeur.content).vert.alpha -= 0.3;
} 


A+

-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Messages postés
22
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
24 novembre 2009

En effet, oubli de ma part :-( MAIS maintenant, le clic ne produit plus rien ! :-( J'ai mis un trace ("chargée"); à la première ligne de chargeComplete, et cette trace n'apparaît jamais, comme si le swf n'était jamais totalement chargé. Pourtant, ce swf est tout ce qu'il y a de simple: un seul calque avec une seule interpolation, et pas de code.
Qu'est-ce que j'ai oublié encore ???

function chargeComplete(e:Event):void
{
trace("chargée");

chargeur.removeEventListener(Event.COMPLETE, chargeComplete);
stage.addEventListener(MouseEvent.MOUSE_DOWN,disparaitre);
}
Messages postés
1375
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Essaie de changer le nom de ton swf :
new URLRequest("animation-chargée.swf");



-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Messages postés
22
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
24 novembre 2009

J'ai testé, et j'ai même mis un nom plus simple "charge.swf" pour être sûr de ne pas avoir de pb avec les accents, espaces ou autres, mais rien à faire, charge.swf se joue bien, mais le clic sur la scène ne produit aucun changement sur le clip contenu dans charge. Une explication à ça ? ou bien peut-être un exemple qui fonctionne du même genre ?
Messages postés
1375
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

MovieClip(chargeur.content).vert ne devient pas en alpha 0.3 ?



-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Messages postés
22
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
24 novembre 2009

J'ai ajouté un bouton sur la scène qui charge le swf, et j'ai ajouté le code :
bouton.addEventListener(MouseEvent.MOUSE_DOWN,disparaitre);


Quand je mets ce code en dehors de chargeComplete, le clip change son alpha mais il s'arrête encore, et si je mets le code dans chargeComplete, comme précédemment, on ne rentre jamais dans cette fonction, et le bouton ne provoque aucun résultat (pas de changement d'alphe, et le clip continue à jouer).

C'est prise de tête tout ça...
Messages postés
1375
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Oups,

c'est pas
chargeur.addEventListener(Event.COMPLETE, chargeComplete);


mais
chargeur.contentLoaderInfo.addEventListener(Event.COMPLETE, chargeComplete);


A+

-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Messages postés
22
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
24 novembre 2009

Avec cette nouvelle modif, on passe bien dans le "complete", mais le clip s'arrête encore (et son alpha change). Je suis revenu à mon point de départ.

function chargeComplete(e:Event):void
{
trace("chargée");
bouton.addEventListener(MouseEvent.MOUSE_DOWN,disparaitre);
chargeur.contentLoaderInfo.removeEventListener(Event.COMPLETE, chargeComplete);
stage.addEventListener(MouseEvent.MOUSE_DOWN,disparaitre);
}

function disparaitre(evt:MouseEvent)
{
MovieClip(chargeur.content).rotation += 3;
MovieClip(chargeur.content).vert.alpha -= 0.3;
}


var chargeur:Loader = new Loader();
var adresse:URLRequest = new URLRequest("chargee.swf");

chargeur.contentLoaderInfo.addEventListener(Event.COMPLETE, chargeComplete);
chargeur.load(adresse);

addChild(chargeur);
Messages postés
1375
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Qu'entend tu pas "mais le clip s'arrête encore". Que veut tu lui faire exactement ?


-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Messages postés
22
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
24 novembre 2009

- dans "chargee.swf", le clip "vert" se déplace grâce à une interpolation de mouvement que j'ai créée directement dans le scénario. Pour ça, j'ai créé deux images clés + interpolation de mouvement entre ces deux images clés. Ca fait juste déplacer le clip "vert" de en haut à gauche vers en bas à droite. Très très simple donc.
- dans "animation qui charge", avec le code que j'ai donné précédemment, je voudrais envoyer un message à "chargee.swf" pour dire au clip vert de devenir + transparent, tout en continuant son interpolation de mouvement. En AS1, je torchais ça en deux lignes et c'était cool. Je m'arrache les cheveux pour faire ça en AS3. D'après le code ci-dessus, ça devrait marcher, non ? Pourquoi MovieClip(chargeur.content).vert.alpha -= 0.3 arrête l'interpolation du clip "vert" alors ?
Messages postés
1375
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Il faut que tu mettes l'interpolation de ton clip "vert" dans un container.


-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Messages postés
22
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
24 novembre 2009

J'ai essayé et ça ne marche pas. Dans chargee.fla, j'ai créé un sprite, auquel j'ai ajouté le clip, et j'ai fait afficher le sprite avec addChild, mais du coup le clip n'apparaît plus dans l'animation chargee.
- Peut-on ajouter une interpolation (comme dans mon cas créée directement dans le scénario) dans un sprite par programmation ? Et surtout, je ne vois pas l'intérêt de faire ça puisque mettre mon clip dans un sprite ne donne rien de plus qu'un clip animé mis sur la scène.
- Par ailleurs, faire cette manip implique de faire changer toutes les animations qui auraient été créées autrefois et qu'on voudrait charger dynamiquement, pas cool.
- enfin, pour tester, j'ai ajouter vert.vitesse 10 dans chargée.fla , et avec le code ci-dessous, "animation qui charge" affiche bien la valeur 10 pour vert.vitesse. Le chemin est donc OK, et c'était déjà vérifié avec vert.alpha .... .

function chargeComplete(e:Event):void
{
trace("chargée");
//trace(MovieClip(chargeur.content).vert.vitesse);
bouton.addEventListener(MouseEvent.MOUSE_DOWN,disparaitre);
chargeur.contentLoaderInfo.removeEventListener(Event.COMPLETE, chargeComplete);
stage.addEventListener(MouseEvent.MOUSE_DOWN,disparaitre);
}

function disparaitre(evt:MouseEvent)
{
MovieClip(chargeur.content).rotation += 3;
//MovieClip(chargeur.content).vert.alpha -= 0.3;
trace(MovieClip(chargeur.content).vert.vitesse);

}


var chargeur:Loader = new Loader();
var adresse:URLRequest = new URLRequest("chargee.swf");

chargeur.contentLoaderInfo.addEventListener(Event.COMPLETE, chargeComplete);
chargeur.load(adresse);

addChild(chargeur);


Prenons le problème à l'envers peut-être. Si tu avais une animation swf sans aucun code dedans, mais juste un clip qui a une interpolation de mouvement dans le scénario de l'animation, comment ferais-tu pour la charger dans un autre swf et modifier l'alpha de ce clip ?
Messages postés
1375
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Comme je te l'ai dis, je créerait un sprite "myClip" sur la scene et dedans je ferais mon interpolation de mouvement. Car si tu fais l'interpolation directement sur la scene pour myClip, l'alpha de marchera pas car ecrasé par l'interpolation.


-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Messages postés
22
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
24 novembre 2009

J'ai fait ça mais ça arrête quand même l'interpolation. Pas grave, je vais faire autrement en créant des fonctions que j'appellerai depuis l'autre swf.
Merci pour ton aide.
Messages postés
1375
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Moi sa marche :
http://www.megaupload.com/?d=58YL3HI5


-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Messages postés
22
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
24 novembre 2009

Explique-moi comment tu fais. Moi, dans chargee.fla, j'ai créé un Sprite dans la bibliothèque, et j'y ai inséré les images de l'interpolation. Ensuite, j'ai fait un new sur ce sprite et je l'ai ajouté à la scène. Mais à la compilation, Flash me jette car un Sprite ne peut pas contenir des images avec du code (par exemple un gotoAndPlay(2) à la fin du scénario.
Messages postés
1375
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Normal car un Sprite est équivalent à un MovieClip sauf que Sprite n'a pas de scenario donc toutes les methode de scenario ne fonctionne pas pour les Spirte (play, pause, nextFrame, prevFrame, gotoAndPlay, gotoAndStop ...)


-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Messages postés
22
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
24 novembre 2009

Oui, je sais, c'est pour ça que je voulais savoir comment tu as fait pour que ça marche puisque tu as écrit : "Comme je te l'ai dis, je créerait un sprite "myClip" sur la scene et dedans je ferais mon interpolation de mouvement."