Avatar billede kgeee Nybegynder
19. april 2005 - 12:13 Der er 22 kommentarer og
1 løsning

Preloader animation som et ur

Jeg vil gerne lave den kendte preloader effekt, der løber 360 grader rundt i en cirkel, altså ligesom en sekund viser der trækker et spor efter sig. Den starter ved kl 12, og bevæger sig hele vejen rundt, hvorefter filmen så er preloaded. Men hvordan laver man denne effekt smartest? Har siddet og leget med mask's, og tænkt på om der skal noget pi ind i regnestykket?
Avatar billede martin_dalgaard Nybegynder
19. april 2005 - 13:14 #1
Det kan jeg nok godt fortælle dig.
2 sek. tjekker lige om min ide virker.
Avatar billede martin_dalgaard Nybegynder
19. april 2005 - 13:39 #2
jo så er den der.

Start med at lave en film med det der ur, i et MC.

Giv nu MC'et instance ur.

Så putter du dette script in i frame 1.

// start med at få filmen loaded

total_bytes = _root.getBytesTotal();
loaded_bytes = _root.getBytesLoaded();

// nu laver vi så en slags funktion
// der finder ud af hvornår filmen er loaded
percent_done = int((loaded_bytes/total_bytes)*100);
var tal = (percent_done);



// når filmen er loaded går du til forsiden
// bare ændre "forside" til din næste scene
if (_framesloaded>=_totalframes) {
gotoAndPlay("forside",1);

// husk at den scene med Preloaderen skal hede loading

} else {
gotoAndPlay("loading",1);
}
// nu siger vi så at uret skal stoppe når at filmen er loaded
ur.gotoAndStop(percent_done);

prøv at se om det virker.  :)
Avatar billede kgeee Nybegynder
19. april 2005 - 13:39 #3
Det lyder godt. Det her er preloaderen jeg har tegnet. Den er ændret lidt i forhold til ovenstående. Men jeg vil gerne animere den røde streg: http://www.mi-casa.dk/preloader.gif

Der skal ikke være noget at stregen til at starte med. Når filmen er loadet, skal hele stregen være tegnet op. Den skal selvfølgelig tegnes op langs ad stregen...
Avatar billede martin_dalgaard Nybegynder
19. april 2005 - 13:42 #4
prøv bare dette først, forstår ikke lige hvad du mener.
Avatar billede kgeee Nybegynder
19. april 2005 - 13:42 #5
Jeg tror du har misforstået min kryptiske forklaring.

Uret skal repræsentere 100% Det skal ikke bare tikke rundt indtil filmen er loadet.

Hvis du kigger på min tegning, skal du forestille dig den røde streg ikke er der når filmen begynder at loade. Efterhånden som der bliver hentet procent ind, kommer mere og mere af den røde streg til syne.
Avatar billede martin_dalgaard Nybegynder
19. april 2005 - 13:44 #6
brug det der hedder motion tween.
Avatar billede martin_dalgaard Nybegynder
19. april 2005 - 13:45 #7
og skal den røde streg køre rundt eller skal den bare blive mere og mere synlig.
Avatar billede kgeee Nybegynder
19. april 2005 - 13:49 #8
Den skal blive mere og mere synlig: se denne illustration.

Jeg ved godt hvordan man tweener det. Men den skal jo tweenes i takt med procent tælleren tæller op. Hvis jeg bare tweener den, vil den jo bare køre i et fast tempo, og måske være færdig før eller efter filmen er loadet.

Jeg skal burge et script, eller fremgangsmåde der gør det muligt at enten maske eller på anden måde animere stregen, så den passer til det antal procenter der er loadet. Det må jo være noget med at 1% er lig 3,6 grader på circklen...
Avatar billede kgeee Nybegynder
19. april 2005 - 13:52 #9
Her er illustrationen: http://www.mi-casa.dk/preloader2.gif
Avatar billede martin_dalgaard Nybegynder
19. april 2005 - 13:53 #10
´Ja det var jo lige hvad jeg sagde i mit svar hehe.

NU laver du en film hvor den røde streg bliver mere og mere synlig, og det
andet du vil have.
Avatar billede martin_dalgaard Nybegynder
19. april 2005 - 13:56 #11
det er ligemeget hvormange frames den er på.
Avatar billede kgeee Nybegynder
19. april 2005 - 13:57 #12
Alright, jeg forstår ikke dit svar. Tror jeg prøvet at rode lidt med det selv. Tak for hjælpen...
Avatar billede martin_dalgaard Nybegynder
19. april 2005 - 14:02 #13
nej prøv lige at vent jeg ligger lige et eks. ud til dig.
Avatar billede martin_dalgaard Nybegynder
19. april 2005 - 14:21 #14
prøv lige at tjekke www.dragonsandslayers.dk/eks.html
Avatar billede kgeee Nybegynder
19. april 2005 - 15:59 #15
Jeg får en 404 not found på ovenstående.
Avatar billede rohaje Nybegynder
19. april 2005 - 19:46 #16
// kan gøres lidt pænere og opdateres til as2 hvis man lyster
function preload(loadingTarg) {
    // preloader er mc'et med den røde ring
    preloader._visible = true;
    // eller attachMovie(preloader) eller hvad du nu gør
    loadTarg_mc = loadingTarg;
    createEmptyMovieClip("preloadermask", getNextHighestDepth());
    // går ud fra at du har 0,0 i midten,
    preloadermask._x = preloader._x;
    preloadermask._y = preloader._y;
    preloader.setMask(preloadermask);
    udsnit = preloadermask;
    startProcent = 0;
    testStart = 0;
    testSlut = 100;
    cirkelRadius = 100;
    onEnterFrame = testLagkagen;
}
function testLagkagen() {
    loaded = (loadTarg_mc.getBytesLoaded()/loadTarg_mc.getBytesTotal())*100;
    drawCirkelUdsnit(loaded);
    if (loaded == 100 && loadTarg_mc.getBytesLoaded()>7) {
        delete onEnterFrame;
        removeMovieClip(preloadermask);
    }
}
function drawCirkelUdsnit(procent) {
    udsnit.clear();
    var delVinkel = (360*(procent/100)/8)/(180/Math.PI);
    udsnit.lineStyle(0, lineColor, 100);
    udsnit.beginFill(0, 100);
    udsnit.moveTo(0, 0);
    //
    var startVinkel = (360*(startProcent/100)-90)/(180/Math.PI);
    udsnit.preVinkel = startVinkel+(delVinkel*4);
    var controlDist = cirkelRadius/Math.cos(delVinkel/2);
    var x1 = ((cirkelRadius)*Math.cos(startVinkel));
    var y1 = ((cirkelRadius)*Math.sin(startVinkel));
    udsnit.lineTo(x1, y1);
    for (n=1; n<9; n++) {
        var ax = ((cirkelRadius)*Math.cos(startVinkel+(n*delVinkel)));
        var ay = ((cirkelRadius)*Math.sin(startVinkel+(n*delVinkel)));
        var cx = ((controlDist)*Math.cos(startVinkel+(n*delVinkel)-(delVinkel/2)));
        var cy = ((controlDist)*Math.sin(startVinkel+(n*delVinkel)-(delVinkel/2)));
        udsnit.curveTo(cx, cy, ax, ay);
    }
    udsnit.lineTo(0, 0);
    udsnit.endFill();
}
preload();
Avatar billede rohaje Nybegynder
19. april 2005 - 19:47 #17
hov den sidste preload(); skal ikke kaldes uden parametre og før der loades :)
Avatar billede rohaje Nybegynder
19. april 2005 - 20:22 #18
lige igen nu også testet som preloader:)

der er tilføjet en loadNoget(url,targ) ,, bemærk den kan kun bruges til en fil ad gangen

//script

function preload(loadingTarg) {
    // preloader er mc'et med den røde ring
    preloader._visible = true;
    // eller attachMovie(preloader,getNextHighestDepth()) ; eller hvad du nu gør
    loadTarg_mc = loadingTarg;
    createEmptyMovieClip("preloadermask", getNextHighestDepth());
    // går ud fra at du har 0,0 i midten,
    preloadermask._x = preloader._x;
    preloadermask._y = preloader._y;
    preloader.setMask(preloadermask);
    udsnit = preloadermask;
    startProcent = 0;
    cirkelRadius = 100;
    onEnterFrame = preloading;
}
function preloading() {
    loaded = (loadTarg_mc.getBytesLoaded()/loadTarg_mc.getBytesTotal())*100;
    drawCirkelUdsnit(loaded);
}
function endPreloading() {
    delete onEnterFrame;
    removeMovieClip(preloadermask);
    preloader._visible = false;
    //eller removeMovieClip(preloader) eller hvad du nu gør;
}
function drawCirkelUdsnit(procent) {
    udsnit.clear();
    var delVinkel = (360*(procent/100)/8)/(180/Math.PI);
    udsnit.lineStyle(0, 0, 100);
    udsnit.beginFill(0xFFFFFF, 100);
    udsnit.moveTo(0, 0);
    //
    var startVinkel = (360*(startProcent/100)-90)/(180/Math.PI);
    udsnit.preVinkel = startVinkel+(delVinkel*4);
    var controlDist = cirkelRadius/Math.cos(delVinkel/2);
    var x1 = ((cirkelRadius)*Math.cos(startVinkel));
    var y1 = ((cirkelRadius)*Math.sin(startVinkel));
    udsnit.lineTo(x1, y1);
    for (n=1; n<9; n++) {
        var ax = ((cirkelRadius)*Math.cos(startVinkel+(n*delVinkel)));
        var ay = ((cirkelRadius)*Math.sin(startVinkel+(n*delVinkel)));
        var cx = ((controlDist)*Math.cos(startVinkel+(n*delVinkel)-(delVinkel/2)));
        var cy = ((controlDist)*Math.sin(startVinkel+(n*delVinkel)-(delVinkel/2)));
        udsnit.curveTo(cx, cy, ax, ay);
    }
    udsnit.lineTo(0, 0);
    udsnit.endFill();
}
my_mcl = new MovieClipLoader();
loadListener = new Object();
loadListener.onLoadStart = function(mc) {
    preload(mc);
};
loadListener.onLoadError = function(mc) {
    endPreloading();
};
loadListener.onLoadComplete = function(mc) {
    endPreloading();
};
my_mcl.addListener(loadListener);
function loadNoget(url, targ) {
    my_mcl.loadClip(url, targ);
}
loadNoget("http://www.rohaje.dk/eksperten/geografi.swf", 2);
Avatar billede kgeee Nybegynder
27. april 2005 - 12:00 #19
Mange tak for jeres svar. Det blev din smarte løsning, rohaje, jeg brugte. Så kom med et svar, så er der point.
Avatar billede rohaje Nybegynder
28. april 2005 - 20:01 #20
et svar :)
Avatar billede rohaje Nybegynder
28. april 2005 - 21:54 #21
mange tak :)
Avatar billede kgeee Nybegynder
28. april 2005 - 21:57 #22
Selv tak, da :-)

Jeg så du søgte noget flash programmerings job i Århus. Hvis det stadig er aktuelt, må du gerne sende mig en mail på info@jahallo.dk
Avatar billede kalaharikid Nybegynder
07. januar 2010 - 12:20 #23
Må jeg godt (mange år senere) sige TUSIND TAK for den her tråd ..jeg skal lave en urskive i flash med fra og til tidspunkter ..og det her var LIGE det jeg manglede ;)
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