Avatar billede bingokaj Nybegynder
03. oktober 2005 - 18:34 Der er 2 kommentarer og
1 løsning

function til at oprette mc virker kun hvis mc oprettes i _root ?

okay, i en actionscript-fil kaldet "game_pirat.as" har jeg følgende kode der kalder en funktion i en anden actionscript-fil:

trace("### START load lib! ###");
makenewmc("item1",230,30,100,100,"piratlib","game_pirat_item1.jpg","true",100);
makenewmc("item2",290,30,100,100,"piratlib","game_pirat_item1.jpg","true",100);
trace(_root.piratlib.item1);
trace(_root.piratlib.item2);
trace("### END load lib! ###");


Den anden fil hedder functions.as. Den indeholder bl.a. følgende funktion (makenewmc):

//### 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)

//variabel der bruges til at tjekke om mc er loaded
mc_load_ok = 0

//opret mc, enten med eller uden parent
if (parent != "_root") {
    //tjeck om parent allerede findes
    if (typeof(eval(parent)) == "movieclip") {
        trace ("opret "+mc+" ("+parent+" findes!)");
        mcparent = eval("_root."+parent)
    }
    else {
        trace ("opret "+mc+" ("+parent+" findes ikke!)");
        mcparent = _root.createEmptyMovieClip(parent,_root.getNextHighestDepth());
    }
    //opret mc
    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);
}

//returner besked om at mc er loaded
mc_load_ok = mc+"_LOADED";
return mc_load_ok
};
//### SLUT opret nyt mc ###


MIT PROBLEM er at hvis jeg kalder makenewmc med variablen parent sat til at være noget andet end _root, så kan jeg tilsyneladende kun oprette ET movieclip, uanset hvor mange gange jeg kalder makenewmc.

Så jeg kan sagtens oprette lige så mange movieclips ude i _root som jeg vil, men lige så snart jeg prøver at neste det movieclip jeg vil oprette inden i et andet (i dette tilfælde "piratlib") så opretter den kun ét movieclip.

Når jeg efterfølgende tracer de to movieclips jeg har forsøgt at oprette, så er det ene bare "undefined" og det andet loader fint nok...
Avatar billede bingokaj Nybegynder
03. oktober 2005 - 18:36 #1
det er lidt en haster, så hvis der er nogle der skarpe så kunne det være superfedt ;-)
Avatar billede bingokaj Nybegynder
03. oktober 2005 - 23:04 #2
jeg har optimeret min funktion lidt (virker dog stadig ikke efter hensigten..grrr).

//### 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)

//variabel der bruges til at tjekke om mc er loaded
mc_load_ok = 0

//opret mc, enten med eller uden parent
if (parent != "_root") {
    //tjeck om parent allerede findes
    if (typeof(eval(parent)) == "movieclip") {
        //hvis parent findes, så sæt mcparent til at være lig stien til parent
        trace ("opret "+mc+" ("+parent+" findes!)");
        mcparent = eval("_root."+parent)
    }
    else {
        //hvis parent ikke findes, så opret parent
        trace ("opret "+mc+" ("+parent+" findes ikke!)");
        mcparent = _root.createEmptyMovieClip(parent,_root.getNextHighestDepth());
    }
   
    //opret mc under parent
    mc = mcparent.createEmptyMovieClip(mc, this.getNextHighestDepth());
}
else if (parent == "_root" ){
    //hvis der ikke er nogen parent, så skal movieclippet bare oprettes i _root
    mc = _root.createEmptyMovieClip(mc, this.getNextHighestDepth());
}

//mc begynder at loade
var mclListener:Object = new Object();
mclListener.onLoadStart = function(target_mc:MovieClip) {
  target_mc.startTimer = getTimer();
};

//mc er færdig med at loade
mclListener.onLoadComplete = function(target_mc:MovieClip) {
  target_mc.completeTimer = getTimer();
};

//hvis der opstår en fejl undervejs
mclListener.onLoadError = function (target_mc, errorCode)
{
  Trace ("*********First my_mcl instance*********");
  Trace ("ERROR CODE = " + errorCode);
  Trace ("Your load failed on movie clip = " + target_mc + "\n");
}

//når mc når til første frame (HELT færdig med at loade)
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)("+target_mc+")");

  //slet listener-objekt som vi ikke længere har brug for
  image_mcl.removeListener(mclListener)
 
  //returner besked om at mc er loaded
  mc_load_ok = mc+"_LOADED";
  return mc_load_ok;
};

//load billedfil og indsæt i movieclip
var image_mcl:MovieClipLoader = new MovieClipLoader();
image_mcl.addListener(mclListener);
image_mcl.loadClip(webhost + "images/" + image, mc);
};
//### SLUT opret nyt mc ###
Avatar billede bingokaj Nybegynder
06. oktober 2005 - 20:12 #3
fik ordnet det på en anden måde, lukker spørgsmålet
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