Avatar billede Slettet bruger
12. februar 2008 - 14:46 Der er 12 kommentarer og
1 løsning

Hvordan laves denne flash-effekt

Hej,

Er der nogen der kan fortælle mig hvordan flashen på dette biograf site er lavet?

www.scala-holstebro.dk

Jeg tænker altså på effekten hvor den skifter fra det ene billede til det andet? Gerne hvor den henter billederne i et bibliotek evt. ved siden af flashen således man ikke skal ha flashfilen åbnet hver gang nye billeder skal bruges.

Det ser også ud til at den preloader billederne i starten.

Hvis scriptet allerede findes er et link til det fint.
Avatar billede maqhem Nybegynder
12. februar 2008 - 15:32 #1
Jeg vil gerne lave en kode til dig. Skal det være AS2 eller AS3?
Avatar billede Slettet bruger
12. februar 2008 - 15:44 #2
Hej maghem,
Jeg bruger Adobe Flash CS3, så kan du lave så jeg evt. kan redigere den deri? Ved ikke helt hvad det "AS" betyder. :)
Avatar billede Slettet bruger
12. februar 2008 - 15:44 #3
Ahh du mener ActionScript. :) AS3 er fint.
Avatar billede maqhem Nybegynder
12. februar 2008 - 16:11 #4
Vil du have mulighed for at lave tekster til de forskellige billeder, eller er det ene og alene billeder?
Avatar billede Slettet bruger
12. februar 2008 - 16:33 #5
Det vil være super fint hvis jeg kan lave små tekster til hvert billede. Så hvis det ikke er for meget besvær for dig at lave, må du gerne gøre det muligt.:) Tror jeg helt sikkert jeg vil gøre brug af.
Avatar billede Slettet bruger
14. februar 2008 - 16:23 #6
Nogen success med at få det lavet? :)
Avatar billede maqhem Nybegynder
14. februar 2008 - 17:20 #7
Jeg er i gang. Jeg leger bare med custom events, og det er sjovt ;)
Avatar billede Slettet bruger
14. februar 2008 - 19:03 #8
Kanon ;) Glæder mig til at se det.
Avatar billede maqhem Nybegynder
20. februar 2008 - 19:01 #9
Jeg har knoklet med det i flere dage nu, og jeg kan bare ikke få lavet det på nogen god måde, således at det kører så flydende og pænt, som det gør. Desuden er opgaven ved at blive lidt trættende efterhånden. Hvis du vil se, hvad jeg har nået at nørkle mig frem til, så kig min næste post. Det er ikke noget vildt og smart, men måske noget du selv kan bruge på én eller anden måde.
Avatar billede maqhem Nybegynder
20. februar 2008 - 19:07 #10
*.fla:

------
var D:Dias = new Dias();
addChild(D);

D.addEventListener(DiasEvent.PICTURES_FADE, C);

D.Width = stage.stageWidth;
D.Height = stage.stageHeight;
D.ReadFrom = new URLRequest("billeder.txt");
D.Split = " : ";
D.LoadPictures();

function C(E:DiasEvent):void {
    E.Pictures[0].FadeAway();
}
------


Dias.as:

------
package {
    import fl.transitions.easing.Regular;
    import fl.transitions.Tween;
    import fl.transitions.TweenEvent;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
   
    import DiasEvent;
   
    public class Dias extends Sprite {
        public var Width:Number;
        public var Height:Number;
        public var Folder:String = "";
        public var ReadFrom:URLRequest;
        public var Split:String;
        public var TextX:Number = 30;
        public var TextY:Number = -30;
        public var PictureDuration:Number = 2;
        public var FadeWidth:Number = 70;
        public var FadeDuration:Number = .8;
        public var All:Array = new Array();
       
        private var Load:LoadScene;
       
        public function Dias():void {
        }
       
        public function LoadPictures():void {
            if(isNaN(Width) || isNaN(Height) || ReadFrom == null || Split == null) {
                throw new Error("'Width', 'Height', 'ReadFrom' and 'Split' have no default values. You must set all of these before calling 'LoadPictures'");
            }
           
            Load = new LoadScene(Width, Height);
            addChild(Load);
           
            var L:URLLoader = new URLLoader(ReadFrom);
            L.addEventListener(Event.COMPLETE, FileReadComplete);
           
            dispatchEvent(new DiasEvent(DiasEvent.FILE_LOAD_START, ReadFrom.url));
        }
       
        private function FileReadComplete(E:Event):void {
            var Data:String = E.target.data;
           
            Data.split("\r").join("").split("\n").forEach(HandlePicture);
           
            All[0].Load();
           
            dispatchEvent(new DiasEvent(DiasEvent.FILE_LOAD_COMPLETE, Data));
        }
       
        private function HandlePicture(Value:String, Index:int, Pictures:Array):void {
            var Data:Array = Value.split(Split);
            var TemporaryPicture:Picture = new Picture(Folder + Data[0], Data[1], this);
           
            addChildAt(TemporaryPicture, 0);
           
            addEventListener(DiasEvent.PICTURES_LOADED, HideLoadingScreen);
           
            TemporaryPicture.Width = Width;
            TemporaryPicture.Height = Height;
        }
       
        private function HideLoadingScreen(E:DiasEvent):void {
            var T:Tween = new Tween(Load, "alpha", Regular.easeInOut, 1, 0, 1, true);
            T.addEventListener(TweenEvent.MOTION_FINISH, HideTweenFinish);
        }
       
        private function HideTweenFinish(E:TweenEvent):void {
            removeChild(Load);
           
            dispatchEvent(new DiasEvent(DiasEvent.PICTURES_FADE, All));
        }
    }
}

internal class LoadScene extends flash.display.Sprite {
    private var Loading:PLoader;
   
    public function LoadScene(Width:Number, Height:Number):void {
        graphics.beginFill(0x000000);
        graphics.drawRect(0, 0, Width, Height);
        graphics.endFill();
       
        Loading = new PLoader();
       
        addChild(Loading);
       
        Loading.x = (Width - Loading.width) / 2;
        Loading.y = (Height - Loading.height) / 2;
    }
}

internal class Picture extends flash.display.Sprite {
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Loader;
    import flash.events.Event;
    import flash.geom.Rectangle;
    import flash.geom.Point;
    import flash.net.URLRequest;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
   
    import DiasEvent;
   
    public var Width:Number;
    public var Height:Number;
   
    private var HDias:Dias;
    private var This:Number;
    private var File:URLRequest;
    private var Text:String;
    private var Image:Bitmap;
   
    public function Picture(NewFile:String, NewText:String, CurrentDias:Dias):void {
        HDias = CurrentDias;
        This = HDias.All.length;
        File = new URLRequest(NewFile);
        Text = NewText;
       
        HDias.All.push(this);
    }
   
    public function Load():void {
        var L:Loader = new Loader();
       
        L.contentLoaderInfo.addEventListener(Event.COMPLETE, LoadComplete);
       
        L.load(File);
    }
   
    private function LoadComplete(E:Event):void {
        Image = E.target.content;
       
        addChild(Image);
       
        Image.width = Width;
        Image.height = Height;
       
        if(HDias.All[This + 1] is Picture) {
            HDias.All[This + 1].Load();
        } else {
            dispatchEvent(new DiasEvent(DiasEvent.PICTURES_LOADED, HDias.All, true));
        }
       
        dispatchEvent(new DiasEvent(DiasEvent.PICTURE_LOAD_COMPLETE, [File.url, Text, Image], true));
    }
   
    public function FadeAway():void {
        removeChild(Image);
        var Start:Number = -HDias.FadeWidth;
        for(var i:Number = 0; i < HDias.FadeWidth; i++) {
            Strip(i + Start, 1, i / HDias.FadeWidth);
        }
        Strip(Start + HDias.FadeWidth, Width - HDias.FadeWidth - Start, 1);
    }
   
    private function Strip(PositionX:Number, StripWidth:Number, Alpha:Number):void {
        var BD:BitmapData = new BitmapData(Image.width / Image.scaleX, Image.height / Image.scaleY);
        var P:BitmapData = new BitmapData(StripWidth / Image.scaleX, Height / Image.scaleY);
       
        BD.draw(Image);
        P.copyPixels(BD, new Rectangle(PositionX / Image.scaleX, 0, StripWidth / Image.scaleX, Height / Image.scaleY), new Point(0, 0));
       
        var B:Bitmap = new Bitmap(P);
       
        addChild(B);
       
        B.x = PositionX;
        B.width = StripWidth;
        B.height = Height;
        B.alpha = Alpha;
    }
}
------


DiasEvent.as:

------
package {
    import flash.events.Event;
   
    public dynamic class DiasEvent extends Event {
        public static const FILE_LOAD_START:String = "_fileLoadStart";
        public static const FILE_LOAD_COMPLETE:String = "_fileLoadComplete";
        public static const PICTURE_LOAD_COMPLETE:String = "_pictureLoadComplete";
        public static const PICTURES_LOADED:String = "_picturesLoaded";
        public static const PICTURES_FADE:String = "_picturesFade";
       
        public function DiasEvent(Type:String, Data:* = null, Bubbles:Boolean = false, Cancelable:Boolean = false) {
            super(Type, Bubbles, Cancelable);
           
            switch(Type) {
                case FILE_LOAD_START:
                this.FileName = Data;
                break;
               
                case DiasEvent.FILE_LOAD_COMPLETE:
                this.FileContent = Data;
                break;
               
                case DiasEvent.PICTURE_LOAD_COMPLETE:
                this.FileName = Data[0];
                this.Text = Data[1];
                this.BitmapContent = Data[2];
                break;
               
                case DiasEvent.PICTURES_LOADED:
                this.Pictures = Data
                this.NumPictures = Data.length;
                break;
               
                case DiasEvent.PICTURES_FADE:
                this.Pictures = Data
                this.NumPictures = Data.length;
                break;
            }
        }
       
        override public function clone():Event {
            return new DiasEvent(type, bubbles, cancelable);
        }
    }
}
------


Lav så en fil ved siden af og kald den noget i stil med billeder.txt (dette angiver du i din fla-fil ved ReadFrom), og så er Split en streng der fortæller Flash, hvordan den skal skælne mellem filnavnet og teksten til hvert billede. I eksemplet ovenover skal det stå således:

sol.png : Dette er et billede af en sol
wallpaper.png : Noget HTML<br>Wow.
w1.jpg : Og noget mere billedtekst.

Jeg ved godt, det kun er halvt færdigt, men jeg har ikke nogen god idé til en smart måde at gøre det færdig på. Jeg håber, det er okay.
Avatar billede maqhem Nybegynder
20. februar 2008 - 19:08 #11
Og en liste over egenskaber, metoder og events (jeg har ikke lige tjekket, om den stadig passer, eller om nogle af metoder er fjernet eller lignende):

Egenskaber:
    Width
    - Bredden på dit dias (tilpasser billedstørrelserne hertil med resize).
   
    Height
    - Højden på dit dias (tilpasser billedstørrelserne hertil med resize).
   
    Folder
    - Mappen hvorfra dine billeder hentes. Standard er samme mappe.
   
    ReadFrom
    - Din tekstfil, hvor du angiver de bestemte billeder deres tekster.
   
    Split
    - Strengen, der splitter hver linje i din tekstfil i to dele: billedfilnavn og billedtekst.
   
    TextX
    - Billedtekstmargin (højre og venstre). Positiv værdi svarer til en venstremargin; negativ værdi svarer til højremargin.
   
    TextY
    - Billedtekstmargin (top og bund). Positiv værdi svarer til en topmargin; negativ værdi svarer til bundmargin.
   
    PictureDuration
    - Antallet af sekunder hvert billede vises.
   
    FadeWidth
    - Bredden af din fade-overgang.
   
    FadeDuration
    - Antallet af sekunder dit dias er om at fade fra ét billede til et andet.


Metoder
    LoadPictures
    - Henter informationerne fra fra ReadFile og henter så de angivne billederne ind.
   
    Run
    - Starter dit dias.
   
    Restart
    - Går tilbage til første billede.
   
    Pause
    - Stopper dit dias midlertidigt på det aktuelle billede.
   
    Stop
    - Går tilbage til første billede og stopper dit dias.


Events
    DiasEvent.FILE_LOAD_START
    *.FileName - navnet på filen, hvis data hentes
    - Afviklet når metoden LoadPictures kaldes
   
    DiasEvent.FILE_LOAD_COMPLETE
    *.FileContent - indholdet af filen
    - Afviklet når metoden LoadPictures har hentet indholdet af datafilen
   
    DiasEvent.PICTURE_LOAD_COMPLETE
    *.FileName - filnavnet på billedet
    *.Text - billedtekst
    *.BitmapContent - et Bitmap-objekt, der indeholder billeder
    - Afviklet når hvert af billederne er loaded
Avatar billede Slettet bruger
20. februar 2008 - 20:47 #12
Okay tak for hjælpen og besværet. :) Jeg kigger på det lidt senere.
Du kan bare oprette svar.
Avatar billede maqhem Nybegynder
20. februar 2008 - 20:57 #13
Okay.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester