Pb loader as3

cs_inaden Messages postés 618 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 27 août 2010 - 13 déc. 2008 à 10:50
cs_inaden Messages postés 618 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 27 août 2010 - 6 janv. 2009 à 17:43
Bonjour à tous,
après de multiple effort, j'ai presque réussi un loader en as3 :
Voici le code :

// Mise en place du sprite qui doit suivre le pourcentage de chargement
var rectangle:Sprite = new Sprite();
// utilisation de l'api de dessin 
rectangle.graphics.beginFill ( 0x55AAFF, 1);
rectangle.graphics.drawRect ( 30, 30, 1, 20 );

addChild ( rectangle );

// création du chargeur
var chargeur:Loader = new Loader();
// référence à l'objet LoaderInfo
var cli:LoaderInfo = chargeur.contentLoaderInfo;
// écoute des événements liés au chargement
cli.addEventListener ( Event.OPEN, debutChargement );
cli.addEventListener ( ProgressEvent.PROGRESS, chargement );
cli.addEventListener ( Event.COMPLETE, chargementTermine ); 
cli.addEventListener ( IOErrorEvent.IO_ERROR, echecChargement ); 
 
// url à atteindre
var maRequete:URLRequest = new URLRequest ("anim/anim.swf");
 
// chargement du contenu
chargeur.load( maRequete );
 
// ajout à la liste d'affichage
addChild ( chargeur );
//définition d'un clip dans lequel l'animation chargé sera intégrée
var scenario:MovieClip;
 
function debutChargement ( pEvt:Event ):void  {
    trace( pEvt );
}

function chargement ( pEvt:ProgressEvent ):void  {
    var pourcent:Number=(pEvt.bytesLoaded/pEvt.bytesTotal)*100;
    rectangle.width = pourcent;
    trace("pourcentage de chargement = "+pourcent);
}
 
function chargementTermine ( pEvt:Event ):void  {
    trace( "chargement terminé : "+pEvt );
}
 
function echecChargement ( pEvt:IOErrorEvent ):void  {
    trace( "problème au chargement : "+pEvt ); 
}

//on gère l'action à la fin du chargement
chargeur.contentLoaderInfo.addEventListener ( Event.COMPLETE, termine );

function termine(evt:Object) {
       scenario = evt.currentTarget.content;
     //var scenario:DisplayObject = pEvt.target.content;
     trace( scenario );
    MovieClip ( scenario ).gotoAndStop(2);
}

3 questions :

Q1 : Le problème, c'est que mon abruti de rectangle, en plus grandir avance ! Et vraiment, je ne comprends pas pourquoi.

Q2 : Y'a pas plus simple ???

Q3 : j'ai essayé d'appliquer le code à l'animation elle même, mais je me fait envoyer boulé si je mets root ou quoi que soit d'autre qui essaie de faire appel à l'animation elle-même dans le loader. Visiblement, le loader ne peut pas se porter lui-même. Comment faire ???

Vous remerciant pour votre aide et vos conseils avisés. 

Tout vient à qui sait attendre

8 réponses

cs_inaden Messages postés 618 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 27 août 2010 2
13 déc. 2008 à 17:20
Rebonjour,
prenons les choses de façon plus simple. J'essaie de construire un loadre, non pas d'une animation loadé mais de l'animation elle-même :

// Mise en place du sprite qui doit suivre le pourcentage de chargement
var rectangle:Sprite = new Sprite();
rectangle.graphics.beginFill ( 0x55AAFF, 1);
rectangle.graphics.drawRect ( 30, 30, 1, 20 );

addChild ( rectangle );

loaderInfo.addEventListener ( Event.OPEN, debutChargement );
loaderInfo.addEventListener( Event.COMPLETE, chargementTermine);
loaderInfo.addEventListener( ProgressEvent.PROGRESS, chargement);

function debutChargement ( pEvt:Event ):void  {
    // arrete la tête de lecture en attendant le chargement
    stop();
}

function chargement ( pEvt:ProgressEvent ):void  {
    var pourcent:Number=(pEvt.bytesLoaded/pEvt.bytesTotal)*100;
     trace("pourcentage de chargement = "+pourcent);
      rectangle.scaleX = pourcent;
}
 
function chargementTermine ( pEvt:Event ):void  {
    trace("!!!!!!!!!!!! on aura tout vu !!!!!!!!!!!!!!");
    gotoAndStop(2);
}

L'animation s'arrête bien en attendant d'être complètement chargé (j'ai mis une grosse photo sur l'image deux) et passe bien à l'image deux une fois chargée.
Mais mon rectangle continue à avancé !!!!
Ça pourrait faire un effet sympa... mais c'est pas le but recherché.
Donc, j'espère que quelqu'un pourra me dire ce qu'il en est. Merci pour votre attention.

Tout vient à qui sait attendre
0
cs_inaden Messages postés 618 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 27 août 2010 2
13 déc. 2008 à 17:29
Alors, juste pour dire.Si je mets un clip sur la scène et que je mets rectangle.width pourcent; à la place de rectangle.scaleX pourcent;... çà marche !
Mais quand même... j'aimerais bien comprendre pourquoi mon rectangle avance si je le fais apparaître par le code !

Tout vient à qui sait attendre
0
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
14 déc. 2008 à 20:51
Hello

Et si tu fais supprime ton ecouteur une fois le chargement terminé ? removeListener
0
cs_inaden Messages postés 618 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 27 août 2010 2
15 déc. 2008 à 07:26
Salut,
merci de participer.
Non, ce n'est pas le problème puisque le problème est pendant le chargement... le rectangle avance durant le chargement de l'animation.
par contre je prends en compte ta remarque parce qu'il me semble que l'on doit effectivement supprimer les écouteurs quand ils n'ont plus de rôle à jouer.
Si tu as une autre idée, n'hésite pas.

Tout vient à qui sait attendre
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
15 déc. 2008 à 09:29
Essaie de laisser ton rectangle sur une position _x fixe... genre tu rajoute dans ta fonction chargement : rectangle._x = position fixe;
0
cs_inaden Messages postés 618 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 27 août 2010 2
15 déc. 2008 à 10:50
Naon... ça marche pas.

Tu as essayé ce code avec une seconde image clé avec une image un peu lourde dessus pour avoir du temps de chargement ???

// Mise en place du sprite qui doit suivre le pourcentage de chargement
var rectangle:Sprite = new Sprite();
rectangle.graphics.beginFill ( 0x55AAFF, 1);
rectangle.graphics.drawRect ( 30, 30, 1, 20 );

addChild ( rectangle );

loaderInfo.addEventListener ( Event.OPEN, debutChargement );
loaderInfo.addEventListener( Event.COMPLETE, chargementTermine);
loaderInfo.addEventListener( ProgressEvent.PROGRESS, chargement);

function debutChargement ( pEvt:Event ):void  {
    // arrete la tête de lecture en attendant le chargement
    stop();
}

function chargement ( pEvt:ProgressEvent ):void  {
    var pourcent:Number=(pEvt.bytesLoaded/pEvt.bytesTotal)*100;
     trace("pourcentage de chargement = "+pourcent);
      rectangle.scaleX = pourcent;
}
 
function chargementTermine ( pEvt:Event ):void  {
    trace("!!!!!!!!!!!! on aura tout vu !!!!!!!!!!!!!!");
    gotoAndStop(2);
}
Tout vient à qui sait attendre
0
Kenshinhim Messages postés 3 Date d'inscription mercredi 8 novembre 2006 Statut Membre Dernière intervention 26 mars 2013
6 janv. 2009 à 17:24
Je pense que ton problème viens de la manière d'utiliser la propriété scaleX.
En effet la propriété ScaleX altère l'échelle horizontale de ton rectangle en utilisant la valeur donner comme multiplicateur (soit de 0 à 100 dans le cas présent).

Donc si ça se trouve cette altération de l'échelle horizontale de ton rectangle joue sur son positionnement.
Tu devrais peut être essayer la méthode inverse :

rectangle.graphics.drawRect ( 30, 30, 100, 20 );

...

function chargement ( pEvt:ProgressEvent ):void  {
   
     var charger:Number=(pEvt.bytesLoaded/pEvt.bytesTotal);
     var pourcent = charger*100;
     trace("pourcentage de chargement = "+pourcent);
      rectangle.scaleX = charger;
}

...

Ton rectangle va donc être créer avec sa forme définitive qu'il va récupérer progressivement au fil du chargement de l'animation (les valeurs que prendra ScaleX variant de 0 à 1).
0
cs_inaden Messages postés 618 Date d'inscription mercredi 4 avril 2007 Statut Membre Dernière intervention 27 août 2010 2
6 janv. 2009 à 17:43
Bonjour,
et merci pour ta réponse. Je l'ai pas dit mais j'ai réussi en posant un clip sur la scène.

Par contre, je viens d'essayer ton idée et c'est beaucoup mieux, le rectangle ne file pas à tout allure de part et d'autre de la scène, mais il ne reste pas en place et avance très doucement tout en grandissant...
Néanmoins, beaucoup de progrès. Je prends en note l'idée de partir d'un rectangle ayant déjà les bonnes dimensions, j'ai l'impression que le principe est plus correct.
Merci pour ton aide... à charge de revanche si un jour je peux... et bonne année !    

Tout vient à qui sait attendre
0
Rejoignez-nous