Avatar billede bingokaj Nybegynder
01. oktober 2005 - 14:42 Der er 8 kommentarer og
1 løsning

manglende højde/bredde på mc ved dynamisk load af jpg

Hej

Jeg har et problem med nedenstående funktion. Når jeg kalder funktionen loader den et jpg ind og det virker fint, bortset fra at hvis jeg tracer højde ell. bredde på mit movieclip(sidste linje), så er værdien 0. Jeg vil gerne kunne styre højde og bredde på det billede jeg henter ind ved bare at sætte mc._width eller noget i den retning. Hvordan gør jeg det ?


function makenewmc(mc,mc_x,mc_y,scale_x,scale_y,parent,image,synlig,mc_alpha) {
//mc=navnet på mc der skal oprettes
//mc_y=y-koordinat
//mc_x=x-koordinat
//scale_y=antal pixels i højden
//scale_x=antal pixels i bredden
//parent=den parent som det nye mc skal have
//image=evt. billede der skal loades ind
    mc = _root.createEmptyMovieClip(mc,_root.getNextHighestDepth());
    mc._visible = synlig;
    mc.loadMovie("images/"+image, mc);
    mc._x = mc_x;
    mc._y = mc_y;
    mc._yscale = scale_y;
    mc._xscale = scale_x;
    mc._alpha = mc_alpha;
    trace(mc._width);
};
Avatar billede kalleballe Nybegynder
01. oktober 2005 - 16:34 #1
Du kan først gøre det når dit billede er 100 procent loadet.
Det finder du ud af ved at tjekke om dit container clip har f.eks. en width.

Det kan du passende bruge setInterval til :)


checkMc = function(){

if(mc._width){

    trace(mc._width);
    clearInterval(runCheckMc);

  }

runCheckMc = setInterval(checkMc, 100);



}


}

vh

KalleBalle
Avatar billede kalleballe Nybegynder
01. oktober 2005 - 16:35 #2
ups der kom vist lige en 'tuborg' for meget med
Avatar billede bingokaj Nybegynder
01. oktober 2005 - 17:11 #3
hej kalleballe, jeg kan godt se princippet, men jeg er lidt usikker på præcis hvordan jeg skal kalde din funktion og hvordan jeg får svar fra funktionen om hvorvidt billedet er loadet ? Hvordan ved funktionen hvilket movieclip jeg vil tjekke på ?

Hvis du evt. gider at give et eksempel hvor det er integreret med min kode, så smider jeg lidt ekstra point i posen :-)
Avatar billede bingokaj Nybegynder
01. oktober 2005 - 22:53 #4
Hej, jeg har modificeret koden (se herunder), men det virker stadig ikke...Problemet ligger så vidt jeg kan se i if-sætningen i checkMc. Hvis jeg tracer mc._width lige før if-sætningen så er den 0. Variablen "resultat" bliver aldrig udfyldt og tracer bare som "undefined".

Jeg forstår heller ikke at når jeg tracer mc._width i checkMc, så tracer den det kun én gang - burde den ikke spytte et 0 ud hver 100 milisekund ?



//### START opret nyt mc ###
function makenewmc(mc,mc_x,mc_y,scale_x,scale_y,parent,image,synlig,mc_alpha) {
//(navnet på mc der skal oprettes, y-koordinat, x-koordinat, antal pixels i højden, antal pixels i bredden, den parent som det nye mc skal have, billede der skal loades ind, transparency)
    if (parent != "_root") {
        //opret parent og læg mc i parent
        trace(mc + " bliver oprettet med parent");
        trace (parent);
        mcparent = _root.createEmptyMovieClip(parent,_root.getNextHighestDepth());
        mc = mcparent.createEmptyMovieClip(mc,_root.getNextHighestDepth());
        mc.loadMovie("images/"+image, mc);
        mc._x = mc_x;
        mc._y = mc_y;
        mc._yscale = scale_y;
        mc._xscale = scale_x;
        mc._alpha = mc_alpha;
        mcparent._visible = synlig;
    }
    else if (parent == "_root" ){
        //opret mc i root
        trace(mc + " bliver oprettet uden parent");
        mc = _root.createEmptyMovieClip(mc,_root.getNextHighestDepth());
        mc._visible = synlig;
        mc.loadMovie("images/"+image, mc);
        runCheckMc = setInterval(checkMc(mc), 100);
        trace("resultat: " + runCheckMc);
        mc._x = mc_x;
        mc._y = mc_y;
        mc._yscale = scale_y;
        mc._xscale = scale_x;
        mc._alpha = mc_alpha;
    }
};
//### SLUT opret nyt mc ###


//### START check om et mc er loaded ###
checkMc = function(mc){
trace(mc._width);
if(mc._width){
    resultat = mc._width;
    return resultat;
    clearInterval(runCheckMc);
  }
}
//### SLUT check om et mc er loaded ###
Avatar billede bingokaj Nybegynder
02. oktober 2005 - 20:51 #5
come on, der må da være nogle flash-hajer der kan fikse det her på no time ??
Avatar billede bingokaj Nybegynder
02. oktober 2005 - 22:26 #6
Nevermind, jeg fandt selv ud af det. Nedenstående funktion opretter et movieclip, loader en jpg dynamisk og sætter dernæst alpha+scale.

function makenewmc(mc,mc_x,mc_y,scale_x,scale_y,parent,image,synlig,mc_alpha) {
//(navnet på mc der skal oprettes, y-koordinat, x-koordinat, antal pixels i højden, antal pixels i bredden, den parent som det nye mc skal have, billede der skal loades ind, transparency)
    if (parent != "_root") {
        mcparent = _root.createEmptyMovieClip(parent,_root.getNextHighestDepth());
        mc = mcparent.createEmptyMovieClip(mc, this.getNextHighestDepth());
        var mclListener:Object = new Object();
       
        mclListener.onLoadStart = function(target_mc:MovieClip) {
          target_mc.startTimer = getTimer();
        };
       
        mclListener.onLoadComplete = function(target_mc:MovieClip) {
          target_mc.completeTimer = getTimer();
        };
       
        mclListener.onLoadInit = function(target_mc:MovieClip) {
          var timerMS:Number = target_mc.completeTimer-target_mc.startTimer;
          target_mc._x = mc_x;
          target_mc._y = mc_y;
          target_mc._yscale = scale_y;
          target_mc._xscale = scale_x;
          target_mc._alpha = mc_alpha;
            trace("Loaded "+mc+"("+target_mc._width+"px)");
        };
       
        var image_mcl:MovieClipLoader = new MovieClipLoader();
        image_mcl.addListener(mclListener);
        image_mcl.loadClip(webhost + "images/" + image, mc);
    }
    else if (parent == "_root" ){
        //opret mc i root
        mc = _root.createEmptyMovieClip(mc, this.getNextHighestDepth());
        var mclListener:Object = new Object();
       
        mclListener.onLoadStart = function(target_mc:MovieClip) {
          target_mc.startTimer = getTimer();
        };
       
        mclListener.onLoadComplete = function(target_mc:MovieClip) {
          target_mc.completeTimer = getTimer();
        };
       
        mclListener.onLoadInit = function(target_mc:MovieClip) {
          var timerMS:Number = target_mc.completeTimer-target_mc.startTimer;
          target_mc._x = mc_x;
          target_mc._y = mc_y;
          target_mc._yscale = scale_y;
          target_mc._xscale = scale_x;
          target_mc._alpha = mc_alpha;
            trace("Loaded "+mc+"("+target_mc._width+"px)");
        };
       
        var image_mcl:MovieClipLoader = new MovieClipLoader();
        image_mcl.addListener(mclListener);
        image_mcl.loadClip(webhost + "images/" + image, mc);
    }
};
//### SLUT opret nyt mc ###
Avatar billede kalleballe Nybegynder
05. oktober 2005 - 00:30 #7
Min funktion skal bare stå og kører... samtidig med at du loader, - så holder den hele tiden øje med om dit mc har en width, - et mc har nemlig først en width/height når det er 100 procent loadet, - så svaret er faktisk ikke helt dårligt :)
Avatar billede fredeboss Nybegynder
07. oktober 2005 - 11:01 #8
Man skal bare tjekke om gettotalbytes > 4 og om gettotalbytes == getbytesloaded.
4 bytes er nemlig et tomt movieclip!!
Avatar billede fredeboss Nybegynder
07. oktober 2005 - 11:02 #9
Du skal altså tjekke det i en onenterframe men ikke movieclippet der loades onenterframe fordi alt bliver slettet i det pågældende movieclip når man kalder LoadMovie!!
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