Pb de bitmap chargé pour la source diaporama AS3

webcrea92 Messages postés 88 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 1 novembre 2009 - 12 juin 2009 à 15:55
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 - 12 juin 2009 à 17:04
Bonjour,

J'essaye de modifier cette classe comme on me l'a suggéré (voir la source diaporama AS3)
J'ai 1 truc qui me choque  et 1 truc que je n'arrive pas à faire  :
1/ Je teste l'alpha pour savoir quel container est masqué, et donc lancer la transition, je pense qu'il y'a mieux à faire
2/ Je n'arrive pas à affecter l'image chargée qui est dans 'contenu' à l'image afficher sans faire de addChild. pourtant j'ai bien 2 objet bitmap (enfin je crois)

Est-ce que quelqu'un peut m'aider?

package {
    import flash.display.*;
    import flash.events.Event;
    import flash.events.IOErrorEvent;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    // Import pour le chronometre
    import flash.events.TimerEvent;
    import flash.utils.Timer;
    // Import pour le message d'erreur
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    // Import de la biblio Tweenlite de greensock.com
    import gs.TweenLite;
    import gs.easing.*;
    import gs.events.TweenEvent;

    public class Diapo extends Sprite {
        private var cheminDiapos:String="diapos/";
        private var nomDiapos:String="nantilly";
        private var sufDiapos:String=".jpg";
        private var url:String="";
        private var nbrDiapos:int=5;
        private var indice:int=0;
       
        private var largeur=591;
        private var hauteur=197;
       
        private var image0:BitmapData = new BitmapData (largeur, hauteur, false, 0xFF0000);
        private var container0:Bitmap = new Bitmap(image0);
       
        private var image1:BitmapData = new BitmapData (largeur, hauteur, false, 0x0000FF);
        private var container1:Bitmap = new Bitmap(image1);
       
        private var chargeur:Loader=new Loader;
        private var cli:LoaderInfo=chargeur.contentLoaderInfo;
        private var chrono:Timer=new Timer(5000,1);

        public function Diapo() {
            container0.alpha=0;
            addChild(container0);
            addChild(container1);
            cli.addEventListener( IOErrorEvent.IO_ERROR, echecChargement );
            cli.addEventListener( Event.COMPLETE, chargementTermine);
            chrono.addEventListener(TimerEvent.TIMER_COMPLETE,chronoAction);
            charger();
        }
        public function charger():void {
            // construction de l'url du fichier à charger
            url=cheminDiapos + nomDiapos + indice + sufDiapos;
            // url à atteindre
            var maRequete:URLRequest=new URLRequest(url);
            // chargement du contenu
            chargeur.load(maRequete);
        }
        function chargementTermine(pEvt:Event):void {
            var objetLoaderInfo:LoaderInfo=LoaderInfo(pEvt.target);
            var contenu:Bitmap = Bitmap ( objetLoaderInfo.content );
            trace(contenu);
            if(container1.alpha==0){
                trace(container1);
                TweenLite.to(container0,2,{alpha:0,ease:Linear.easeNone,onComplete:diapoApparait(pEvt)});
            }else{
                trace(container0);
                TweenLite.to(container1,2,{alpha:0,ease:Linear.easeNone,onComplete:diapoApparait(pEvt)});
            }
        }

        private function diapoApparait(pEvt:Event):void {
            if(container1.alpha==0){
                TweenLite.to(container1,2,{alpha:1,ease:Linear.easeNone});
            }else{
                TweenLite.to(container0,2,{alpha:1,ease:Linear.easeNone});
            }           
            chrono.start();
        }
       
        function echecChargement( pEvt:IOErrorEvent ):void {
            var messageErreur = new TextField;
            messageErreur.text = "Echec chargement image n°"+indice+"\nLe fichier "+url+" n'existe pas...";
            messageErreur.autoSize = TextFieldAutoSize.LEFT;
            messageErreur.selectable = false;
            addChild(messageErreur);
        }

        private function chronoAction(event:TimerEvent) {
            indice++;
            indice %= nbrDiapos;
            charger();
        }
    }
}

Merci d'avance

PS: Pour tester cette classe, il faut charger diaporama AS3 et remplacer le contenu du package diapo.as

Christophe
Webcréa sarl
http://www.webcrea.fr

3 réponses

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
12 juin 2009 à 16:44
Pour afficher tes bitmaps, il faut déjà les créer dés le début de ta classe, ensuite les remplir avec le contenu de ton loader :

//dans le corps de ta classe :
var container0:Bitmap = new Bitmap();
var container1:Bitmap = new Bitmap();
[...]
//dans ta fonction "chargementTermine"
var contenu:Bitmap = this["container"+(indice%2)]; //à tester, car c'est de mémoire
contenu = new Bitmap(pEvt.currentTarget.content );

par exemple ...

ensuite, tu n'a qu'à modifier l'alpha de container1 (qui se trouve au-dessus de l'autre) et qui te permettras d'afficher/masquer progressivement l'autre
sachant que si l'alpha est à 0 tu le passe à 1 et inversement ...

Peg'
0
webcrea92 Messages postés 88 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 1 novembre 2009
12 juin 2009 à 16:53
Bein il me semble que c'est ce que je fais 2 bitmap, un bleu, un rouge

private var image0:BitmapData = new BitmapData (largeur, hauteur, false, 0xFF0000);
private var container0:Bitmap = new Bitmap(image0);
       
private var image1:BitmapData = new BitmapData (largeur, hauteur, false, 0x0000FF);
private var container1:Bitmap = new Bitmap(image1);

ça marche d'ailleurs, les 2 containers font bien la transition si tu lances le fla

Et dans 'chargementTermine'

var objetLoaderInfo:LoaderInfo=LoaderInfo(pEvt.target);
var contenu:Bitmap = Bitmap ( objetLoaderInfo.content );

Seulement je n'arrive pas à affecter contenu au container, ça doit être tout c..

Christophe
Webcréa sarl
http://www.webcrea.fr
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
12 juin 2009 à 17:04
relis mieux ce que je t'ai donnéet compare avec ton code ... ce n'est pas vraiment pareil.
Moi je n'ai créé de BitmapData nulle part et toi tu attribue le contenu de ton loader à une variable dont tu ne fais rien : "contenu"

Peg'
0
Rejoignez-nous