Avatar billede zaditor Nybegynder
19. august 2006 - 13:07 Der er 42 kommentarer og
4 løsninger

preloader og deaktivering af knap

Hej

To spørgsmål:

1) Jeg har en knap, der loader et nyt movie ind, når der trykkes på den. Men jeg har fundet ud af, at hvis jeg efter første tryk, trykker hurtigt på den igen, så loader den ik' mit movie ind. Hvilket er meget irriterende.. Er der en måde hvorpå man kan deaktivere en knap, når man har trykket på den?.. Det skal siges, at når jeg trykker på knappen, så kører den en motiontween, og den skal selvf. stadigvæk fungere, så det er sådan set bare selve tryk-funktionen, som skal forsvinde ved første tryk.

2) Preloader: jeg loader et billede ind via følgende script:

choice = 0;
switch (choice) {
case 0 :
    location.loadMovie("images/image0.swf");
    break;
}

Men inden siden loades, skal der køre en preloader.. Men har fundet ud af, at hvis/når preloaderen har loaded færdigt, så er det ik' altid at billedet loades ind, kun knapperne.. Hvordan får jeg billedet til at loade ind også?

Den preloader, jeg benytter mig af, er den, som kan findes her:
http://www.kirupa.com/developer/mx/percentagepreloader.htm

Det samme gør sig faktisk gældende for det andet movie, som jeg loader ind, efter jeg har trykket på knappen, som jeg nævnte lige før.. Der vil jeg også gerne, at en preloader kører (hvis nødvendigt), inden selve movie'et loades ind.. I det movie loader jeg en række billeder ind via følgende:

//*** Billed-load ***//
// set random # variables - each must be 0 for first 'while' loop below
var randomNum = 0;
var randomNumLast = 0;

// parent container
var container_mc = menubg_mc.createEmptyMovieClip("container",0);
// movie clip containers
container_mc.createEmptyMovieClip("loader1_mc",2);
container_mc.createEmptyMovieClip("loader2_mc",1);

// preload watcher
this.createEmptyMovieClip("watcher_mc",100);

// load xml
images_xml = new XML();
images_xml.ignoreWhite=true;
images_xml.onLoad = parse;
images_xml.load("images.xml");

function parse(success) {
    if (success) {
        imageArray = new Array();
        var root = this.firstChild;
        _global.numPause = Number(this.firstChild.attributes.timer * 1000);
        _global.order = this.firstChild.attributes.order;
        _global.looping = this.firstChild.attributes.looping;
        _global.fadetime = Number(this.firstChild.attributes.fadetime);
        //*** _global.xpos = Number(this.firstChild.attributes.xpos);
        //*** _global.ypos = Number(this.firstChild.attributes.ypos);
        var imageNode = root.lastChild;
        var s=0;
        while (imageNode.nodeName != null) {
            imageData = new Object;
            imageData.path = imageNode.attributes.path;
            imageArray[s]=imageData;
            imageNode = imageNode.previousSibling;
            s++;
        }
        // place parent container
        container_mc._x = -448;
        container_mc._y = 58;
       
        // parse array
        imageArray.reverse();
        imageGen(imageArray);
    } else {
        trace('problem');
    }
}

// depth swapping
function swapPlace(clip,num) {
    eval(clip).swapDepths(eval("container_mc.loader"+num+"_mc"));
}

function loadImages(data,num) {
    if (i==undefined || i == 2) {
        i=2;
        createLoader(i,data,num);
        i=1;
    } else if (i==1) {
        createLoader(i,data,num);
        i=2;
    }
}
function createLoader(i,data,num) {
    thisLoader=eval("container_mc.loader"+i+"_mc");
    thisLoader._alpha=0;
    thisLoader.loadMovie(data[num].path);
    watcher_mc.onEnterFrame=function () {
        var picLoaded = thisLoader.getBytesLoaded();
        var picBytes = thisLoader.getBytesTotal();
        if (isNaN(picBytes) || picBytes < 4) {
            return;
        }
        if (picLoaded / picBytes >= 1) {
            swapPlace("container_mc.loader2_mc",1);
            alphaTween = new mx.transitions.Tween(thisLoader, "_alpha", mx.transitions.easing.Regular.easeOut,0,100,_global.fadetime,true);
            timerInterval = setInterval(imageGen,_global.numPause,data);
            delete this.onEnterFrame;
        }
    }
}
function imageGen(data) {
    // random, or sequential?
    if (_global.order=="random") {
        // choose random # between 0 and total number of images
        while (randomNum == randomNumLast) {
            randomNum = Math.floor(Math.random() * data.length);
            trace(randomNum);
        }
        loadImages(data,randomNum);
        randomNumLast = randomNum;
    } else if (_global.order=="sequential") {
        // start at 0, increment to total number of images, then drop back to zero when done
        if (p==undefined || p==data.length && _global.looping=="yes") { p=0; } else { break; }
        loadImages(data,p);
        p++;
    } else {
        trace ("order attribute in xml isn't correct - must specify either 'random' or 'sequential'");
    }
    clearInterval(timerInterval);
}


Er der nogen, der kan hjælpe mig med dette?
Avatar billede zaditor Nybegynder
19. august 2006 - 13:10 #1
Grunden til, jeg benytter mig af følgende kode, til at loade et enkelt billede ind...

choice = 0;
switch (choice) {
case 0 :
    location.loadMovie("images/image0.swf");
    break;
}

... er fordi, jeg først havde planlagt, at den random skulle skifte mellem nogle billeder, den skulle loade ind.. Men det gik jeg så fra... Så valgte jeg at lave lidt om i det, så det bare er det ene billede den loader
Avatar billede zaditor Nybegynder
19. august 2006 - 13:17 #2
Skal måske også lige sige, at min knap fungerer på følgende måde..

btn1_mc.onRelease = function() {
  _root.contents.loadMovie("main_site9.swf");
}
Avatar billede jakobhighfarm Nybegynder
19. august 2006 - 16:00 #3
Hej !

For at deaktivere din knap kan du bruge en variable til at tjekke om knappen har være trykket ned eller ej.

Ex.
1. frame af din timeline: var tjek_btn_status = 0;

Og på din knap:
on (release){
if (tjek_btn_satus == 0){
    location.loadMovie("images/image0.swf");
}
else if (tjek_btn_== 1){
stop();
}

tjek_btn_status = 1:
}

Har ikke lige tjekket det i flash men princippet er sådan at den først defnere variablen tjek_btn_status = 0 - Det tjekker knappen så og loader billedet første gang, samtidig definere den variablen til 1 hvormed næste gang knappen trykkes ned vil den bare gå på Stop! - jeg håber det giver mening!

Ang. Preloaderen så vil jeg foreslå dig at se denne: http://www.flashforum.dk/videotutorials/ ( Moviecliploader)
Eneste ændring DU skal lave er at smide selve LOAD koden over i din knap istedet!
- du bør ikke preloade eksterne billeder medmindre du SKAL bruge dem i den givende situation hvor du loader, da de fylder op i din swf .... :) Skriv endelige hvis det giver knas!!!
Avatar billede zaditor Nybegynder
19. august 2006 - 16:19 #4
hmm... glemte helt at skrive, at _root.contents.loadMovie("main_site9.swf") faktisk ik' er sat på selve knappen.. Det er sat i en frame i slutningen af knappens motiontween.. Så når knappen har flyttet sig hen på sin plads, så loader den først main_site9.swf....

image0.swf er et billede, som er på selve intro-siden... Den skal ik loades via nogen knap.. Det er main_site9.swf der loades efter at jeg har trykket på min "enter"-knap. Og det er enter-knappen der laver det motion, og derefter loader den main_site9.swf
Avatar billede zaditor Nybegynder
19. august 2006 - 16:20 #5
Men det er vel bare at fjerne

{
    location.loadMovie("images/image0.swf");
}

fra det du har skrevet.. Det skulle vel egentlig gi' samme resultat bortset fra at den ik' skal loade image0.swf..
Avatar billede jakobhighfarm Nybegynder
19. august 2006 - 16:27 #6
ja, det er bare for eksemplets skyld du kan putte whatever ind :)
Avatar billede zaditor Nybegynder
19. august 2006 - 16:28 #7
this.btn1_mc.onRelease = function() {
        btn2_mc.gotoAndPlay("_login");
        btn1_mc.gotoAndPlay("_enter");
}

Det er det, der sådan set er på min "enter-knap"

når den kører "_enter", så i slutningen af det, der har jeg placeret nedenstående i et frame:
_root.contents.loadMovie("main_site9.swf");

Dvs at når knappen er kørt på plads, så loades main_site9.swf.

Problemet er jo så, at hvis jeg trykker på enter-knappen to gange hurtigt efter hinanden så kører knappen nærmest bare tilbage til start-position og loader ik' noget.. Det skal være sådan at den kun ka' trykkes på én gang..
Avatar billede jakobhighfarm Nybegynder
19. august 2006 - 16:30 #8
Du kan lave to frames istarten hvor du på frame 1 har din action this.btn1_mc.onRelease = function() {
        btn2_mc.gotoAndPlay("_login");
        btn1_mc.gotoAndPlay("_enter");
}

OG når den så når frame 2 så fjerne du bare koden så virker knappen KUN i 1. frame !?
Avatar billede zaditor Nybegynder
19. august 2006 - 16:31 #9
men skulle jeg så i teorien ikke bare kunne skrive sådan her:

this.btn1_mc.onRelease = function() {
    if (tjek_btn_satus == 0){
        btn2_mc.gotoAndPlay("_login");
        btn1_mc.gotoAndPlay("_enter");
    }
    else if (tjek_btn_== 1){
    stop();
    }

    tjek_btn_status = 1:
}
Avatar billede zaditor Nybegynder
19. august 2006 - 16:31 #10
jeg prøver :)
Avatar billede jakobhighfarm Nybegynder
19. august 2006 - 16:31 #11
Jo det er også en mulighed...
Avatar billede zaditor Nybegynder
19. august 2006 - 16:36 #12
er det mig, eller skal der ik' også stå

else if (tjek_btn_status == 0) ?
Avatar billede zaditor Nybegynder
19. august 2006 - 16:41 #13
var tjek_btn_status = 0;

this.btn1_mc.onRelease = function() {
    if (tjek_btn_status == 0) {
        btn2_mc.gotoAndPlay("_login");
        btn1_mc.gotoAndPlay("_enter");
    }
    else if (tjek_btn_status == 1) {
        stop();
    }
}

det står i mit 1. frame.. Men jeg ka' stadigvæk godt trykke på knappen lige efter = ged
Avatar billede zaditor Nybegynder
19. august 2006 - 16:52 #14
Hah! Tanketorsk..

Jeg kan jo bare putte preloaderen ind i min image0.swf.. Så virker det..!
Vil dog stadigvæk lige ta' et smut forbi det, du har linket til :)

Men det andet med at deaktivere knappen.. Det kan jeg stadigvæk ik' få til at virke..
Avatar billede zaditor Nybegynder
19. august 2006 - 16:54 #15
Nej - hva' fanden.. Det gider sq stadigvæk ik' at virke.. Så må jeg nok hellere kigge på det, som du har henvist til...
Avatar billede jakobhighfarm Nybegynder
19. august 2006 - 16:54 #16
Her du indsat en keyframe i frame 2. hvor du så fjerne alt koden ? - denne løsninge behøver ikke IF funktionen!

Hvis du vil bruge IF'n:

1. keyframe = var tjek_btn_status = 0;

På Mc/knappen:
this.btn1_mc.onRelease = function() {
    if (tjek_btn_status == 0) {
        btn2_mc.gotoAndPlay("_login");
        btn1_mc.gotoAndPlay("_enter");
    }
    else if (tjek_btn_status == 1) {
        stop();
    }
}
Avatar billede zaditor Nybegynder
19. august 2006 - 17:13 #17
this.btn1_mc.onRelease = function() {
    if (tjek_btn_status == 0) {
        btn2_mc.gotoAndPlay("_login");
        btn1_mc.gotoAndPlay("_enter");
    }
    else if (tjek_btn_status == 1) {
        stop();
    }
}

Man ka' da ik' sætte ovenstående på et mc?
Avatar billede jakobhighfarm Nybegynder
19. august 2006 - 17:15 #18
joda

Men send mig evt. filen så kan jeg lige se problemet!
Avatar billede jakobhighfarm Nybegynder
19. august 2006 - 17:18 #19
nej nu er det mig der roder rundt! du skal smide alt koden ind i 1. keyframe og så skal du i anden keyframe fjerne koden det burde da virke...
Avatar billede zaditor Nybegynder
19. august 2006 - 17:19 #20
Hm... jeg får den her fejl, når jeg smækker det på min knap_mc

**Error** Scene=Scene 1, layer=navigation, frame=1:Line 1: Statement must appear within on/onClipEvent handler
    this.btn1_mc.onRelease = function() {

Total ActionScript Errors: 1     Reported Errors: 1
Avatar billede zaditor Nybegynder
19. august 2006 - 17:24 #21
mine layers:

actions -> ja, mine actions
mask -> kører en mask henover de nedenstående
content -> her har jeg mit content_mc, hvor min main_site9.swf bliver loadet ind
navigation -> mine to knapper.. her er Enter-knappen
pictures -> her er det mc, som billedet bliver loadet ind i

Alle layers ligger i 1. frame... Så det, du siger, er, at jeg skal flytte mask, content, navigation og pictures hen i frame2 og så skal det her stå i actions:


var tjek_btn_status = 0;

this.btn1_mc.onRelease = function() {
    if (tjek_btn_status == 0) {
        btn2_mc.gotoAndPlay("_login");
        btn1_mc.gotoAndPlay("_enter");
    }
    else if (tjek_btn_status == 1) {
        stop();
    }
}


Er det rigtig forstået?
Avatar billede jakobhighfarm Nybegynder
19. august 2006 - 17:29 #22
JA! Ideen er at du rykker fra en frame men din action og til en hvor den ikke er der... min mail er: jho@link2design.dk
Avatar billede zaditor Nybegynder
19. august 2006 - 17:41 #23
sendt :)
Avatar billede zaditor Nybegynder
19. august 2006 - 18:09 #24
er det til at finde ud af ?
Avatar billede zaditor Nybegynder
19. august 2006 - 18:24 #25
aaargh :P - så har du lavet en usynligknap, som bare skal køre funktionen i stedet.. :) - smart nok
Avatar billede zaditor Nybegynder
19. august 2006 - 18:26 #26
jamen så var det vel egentlig det? - bortset fra, at preloaderen vel egentlig kun kører på billedet - ka' man få den til at fungere på det hele?
Avatar billede jakobhighfarm Nybegynder
19. august 2006 - 18:32 #27
hehe ja så simpelt kan det nogle gange gøres... :)
Jeg tror at du skal bruge din oprindelige preloader til at loade selve swf'n og så bruge den jeg henviste til på billedet. Det må være nummer et.
Avatar billede zaditor Nybegynder
19. august 2006 - 18:38 #28
okay - jeg prøver lige, om jeg ka' få det til at virke..
Avatar billede zaditor Nybegynder
19. august 2006 - 18:47 #29
Nu har jeg smidt den der preloader ind (som jeg refererede til) i den swf, som jeg loader ind via min enter-knap.. Den virker sådan set fint nok.. Den loader selve mit content ind, men hvis der er behov for, at den skal køre preloaderen, så gider den ik' loade de billeder ind, som jeg loader via følgende kode. Men alt andet loader den ind.

//*** Billed-load ***//
// set random # variables - each must be 0 for first 'while' loop below
var randomNum = 0;
var randomNumLast = 0;

// parent container
var container_mc = menubg_mc.createEmptyMovieClip("container",0);
// movie clip containers
container_mc.createEmptyMovieClip("loader1_mc",2);
container_mc.createEmptyMovieClip("loader2_mc",1);

// preload watcher
this.createEmptyMovieClip("watcher_mc",100);

// load xml
images_xml = new XML();
images_xml.ignoreWhite=true;
images_xml.onLoad = parse;
images_xml.load("images.xml");

function parse(success) {
    if (success) {
        imageArray = new Array();
        var root = this.firstChild;
        _global.numPause = Number(this.firstChild.attributes.timer * 1000);
        _global.order = this.firstChild.attributes.order;
        _global.looping = this.firstChild.attributes.looping;
        _global.fadetime = Number(this.firstChild.attributes.fadetime);
        //*** _global.xpos = Number(this.firstChild.attributes.xpos);
        //*** _global.ypos = Number(this.firstChild.attributes.ypos);
        var imageNode = root.lastChild;
        var s=0;
        while (imageNode.nodeName != null) {
            imageData = new Object;
            imageData.path = imageNode.attributes.path;
            imageArray[s]=imageData;
            imageNode = imageNode.previousSibling;
            s++;
        }
        // place parent container
        container_mc._x = -448;
        container_mc._y = 58;
       
        // parse array
        imageArray.reverse();
        imageGen(imageArray);
    } else {
        trace('problem');
    }
}

// depth swapping
function swapPlace(clip,num) {
    eval(clip).swapDepths(eval("container_mc.loader"+num+"_mc"));
}

function loadImages(data,num) {
    if (i==undefined || i == 2) {
        i=2;
        createLoader(i,data,num);
        i=1;
    } else if (i==1) {
        createLoader(i,data,num);
        i=2;
    }
}
function createLoader(i,data,num) {
    thisLoader=eval("container_mc.loader"+i+"_mc");
    thisLoader._alpha=0;
    thisLoader.loadMovie(data[num].path);
    watcher_mc.onEnterFrame=function () {
        var picLoaded = thisLoader.getBytesLoaded();
        var picBytes = thisLoader.getBytesTotal();
        if (isNaN(picBytes) || picBytes < 4) {
            return;
        }
        if (picLoaded / picBytes >= 1) {
            swapPlace("container_mc.loader2_mc",1);
            alphaTween = new mx.transitions.Tween(thisLoader, "_alpha", mx.transitions.easing.Regular.easeOut,0,100,_global.fadetime,true);
            timerInterval = setInterval(imageGen,_global.numPause,data);
            delete this.onEnterFrame;
        }
    }
}
function imageGen(data) {
    // random, or sequential?
    if (_global.order=="random") {
        // choose random # between 0 and total number of images
        while (randomNum == randomNumLast) {
            randomNum = Math.floor(Math.random() * data.length);
            trace(randomNum);
        }
        loadImages(data,randomNum);
        randomNumLast = randomNum;
    } else if (_global.order=="sequential") {
        // start at 0, increment to total number of images, then drop back to zero when done
        if (p==undefined || p==data.length && _global.looping=="yes") { p=0; } else { break; }
        loadImages(data,p);
        p++;
    } else {
        trace ("order attribute in xml isn't correct - must specify either 'random' or 'sequential'");
    }
    clearInterval(timerInterval);
}


Hvad er det, der gør, at den så ik' gider vise billederne..?
Avatar billede jakobhighfarm Nybegynder
19. august 2006 - 18:51 #30
Jeg syntes ikke jeg kan se hvor du definere hvad det er du henter ind ? (jpg) ? -det virker som om der mangler noget ... kan det være det ?
Avatar billede jakobhighfarm Nybegynder
19. august 2006 - 18:54 #31
Har au haft det til at virke det der script, eller vil du have mig til at fejlfinde det ? :)
Avatar billede zaditor Nybegynder
19. august 2006 - 18:55 #32
Ovenstående virker fint nok.. For det loader sådan set billederne fint nok ind.. Men.. Den preloader, som jeg putter på, den som jeg henviste til.. Såfremt der så er behov for at den skal køre, så når den har preloaded færdigt, så viser den alt andet ud over de billeder, som bli'r loaded ind via det ovenstående script..
Avatar billede zaditor Nybegynder
19. august 2006 - 19:03 #33
det er en xml-fil, den sådan set loader ind, hvor i stien til billederne ligger.. Så det er via xml-filen, den loader billederne ind..
Avatar billede jakobhighfarm Nybegynder
19. august 2006 - 19:11 #34
Jeps! jeg er bare lidt forvirret!

1. Du har et script som loader dine billeder via ovenstående XML script

2. Så har du en anden preloader til at loade bilederne med eller ?

Sådan som jeg læser XML/ AS scriptet så er det noget random imageshow hvor den skifter billederne ud automatisk ? eller ? :-)
Avatar billede zaditor Nybegynder
19. august 2006 - 19:26 #35
Hehe... Nej, nu prøver jeg lige at forklare det...

Jeg har en intro-flash (den du fik).. Når jeg trykker på enter-knappen, loader den main_site ind...

Inde på main site, har jeg det script, som loader en xml-fil ind, og den xml-fil henviser til nogle billeder som bliver loadet ind.. Ovenstående script gør også, at billederne skifter og fader mellem hinanden..

Det, jeg ønsker, er, at når jeg har trykket på min enter-knap i min intro-flash, så skal den (selvf. alt afhængig af om man har en hurtig eller langsom internetforbindelse) køre en preloader.. Men det skal være på hele den swf-fil, jeg loader ind med enter-knappen. Lige nu, der kører preloaderen, men når den har loaded færdig, så gider den ik' vise billederne, som det ovenstående script loader ind. Den viser kun menu'en og de andre ting, som er i swf-filen..

Mit spørgsmål er så, hvordan jeg får den til også at vise billederne, når den har preloadet færdig...


Alt det her kunne jeg sådan set også godt tænke mig på min intro-flash.. Lige nu gør den det jo kun på det billede, den loader ind.. Altså den moviecliploader, som du henviste til.. Men den skulle sådan set også gerne preloade mine to knapper...


Håber du forstår.. :)
Avatar billede zaditor Nybegynder
19. august 2006 - 19:33 #36
og får lige at gøre det helt klar, så er det den her måde, preloaderen er lavet på..

http://www.kirupa.com/developer/mx/percentagepreloader.htm
Avatar billede zaditor Nybegynder
19. august 2006 - 20:14 #37
Kan du forstå, hva' jeg mener? :)
Avatar billede jakobhighfarm Nybegynder
20. august 2006 - 14:50 #38
Ja kan godt se det! Og den er også fin den du har fundet ! - jeg tror måske at det er dén "goto" action du har til sidst i preloaderen som henviser til noget forkert... ?
Avatar billede jakobhighfarm Nybegynder
20. august 2006 - 15:41 #39
Altså dén goto i den preloader fra linket! - den skal jo fungere som en "generel" preloader og skal derfor "bare" regne på hvor stor din swf fil er... en rimelige simpel preloader egentlig.
Avatar billede zaditor Nybegynder
20. august 2006 - 15:48 #40
hvis jeg indsætter den preloader i min main_site, og så prøver at køre intro-siden, klikker på enter-knappen og loader main_site ind.. Så kommer der kun den loadbar fra preloaderen.. den loader det ikke ordentligt ind..
Avatar billede jakobhighfarm Nybegynder
20. august 2006 - 15:51 #41
det lyder underligt... måske skal jeg lige se dine filer igen!
Avatar billede zaditor Nybegynder
20. august 2006 - 16:03 #42
sendt
Avatar billede jakobhighfarm Nybegynder
20. august 2006 - 16:36 #43
Sent Back :) Så skulel der være styr på det! jeg har indsat preloaderen på begge swf'er ... da nr. 2 hentes ind i nr. 1 kan de to preloadere ikke har samme variabler. Det kom jeg udenom ved at omdøbe dem alle til "main" i enden....

/Jakob
Avatar billede zaditor Nybegynder
20. august 2006 - 17:10 #44
danke
Avatar billede zaditor Nybegynder
21. august 2006 - 16:16 #45
Hmm.. Fik da vist sagt "danke" for hurtigt.. Der er altså noget, der ik' fungerer?.. Når jeg åbner min intro-side og trykker enter.. Så når den loader main_site ind, så kommer loadbar'en bare til syne oven på det billede, som er på mit intro site... Og har også fundet ud af, at hvis jeg trykker ctrl+Enter og kører selve filmen af min intro, så kører det fint - men hvis jeg gør det igen, mens det er åbent, og den kører preloaderen, så loader den ik' mit billede ind?...
Avatar billede zaditor Nybegynder
21. august 2006 - 16:29 #46
Og jeg synes jo egentlig ik' jeg umiddelbart ka' se noget sted, der er skrevet main i nogen variabler.. ?
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