Avatar billede kalleballe Nybegynder
08. oktober 2004 - 12:14 Der er 42 kommentarer og
1 løsning

MovieClipLoader problem hvad gør jeg dog galt

class Loadimage extends MovieClip{
   
       
    private var my_mcl:MovieClipLoader;
   
    var mclListener:Object = new Object();
   
   
   
    function Loadimage(){
       
               
        var myListener:Object         = new Object();
        var my_mcl:MovieClipLoader     = new MovieClipLoader();
       
        my_mcl.addListener (myListener);
       
        myListener.onLoadInit         = initTarget
        myListener.onLoadProgress     = showProgress;
        myListener.onLoadComplete     = setPic;
       
       
       
        onEnterFrame = checkImage;
       
    }
   
   
    private function checkImage():Void
    {
                        my_mcl.loadClip("http://www.mitBillede.dk/billede.jpg", this);
            }
       
        }
       
    }   
   
    function showProgress():Void
    {
       
        trace("jeg loader ");
       
       
    }
   
    function setPic():Void
    {
       
        trace("slut");
       
    }
   
    function initTarget(target_mc:MovieClip) {
 
      var mclProgress:Object = my_mcl.getProgress(target_mc);
      trace(mclProgress.bytesLoaded+" of "+mclProgress.bytesTotal+" bytes loaded");
    }
   
}


tja, - der sker ikke noget :) my_mcl.loadClip("http://www.mitBillede.dk/billede.jpg" bliver aldrig loadet :(
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 12:15 #1
PS

http://www.mitbillede.dk/billede.jpg er bare et dummy url, - men med et rigtigt url virker det heller ikke ;)
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 12:23 #2
ups:

class Loadimage extends MovieClip{
   
       
    private var my_mcl:MovieClipLoader;
   
 
   
   
   
    function Loadimage(){
       
               
        var myListener:Object        = new Object();
             
        my_mcl.addListener (myListener);
       
        myListener.onLoadInit        = initTarget
        myListener.onLoadProgress    = showProgress;
        myListener.onLoadComplete    = setPic;
       
       
       
        onEnterFrame = checkImage;
       
    }
   
   
    private function checkImage():Void
    {
                        my_mcl.loadClip("http://www.mitBillede.dk/billede.jpg", this);
            }
       
        }
       
    }   
   
    function showProgress():Void
    {
       
        trace("jeg loader ");
       
       
    }
   
    function setPic():Void
    {
       
        trace("slut");
       
    }
   
    function initTarget(target_mc:MovieClip) {
 
      var mclProgress:Object = my_mcl.getProgress(target_mc);
      trace(mclProgress.bytesLoaded+" of "+mclProgress.bytesTotal+" bytes loaded");
    }
   
}


er lidt bedre, - virker dog stadig ikke :(
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 12:30 #3
måske kan jeg droppe checkImage methoden og smide load ind i initTarget..

Problemet er bare at den kun skal loade billedet hvis en betingelse er opfylde, -

altså..

if(_root.flag==1){

load blablabla

}
Avatar billede rohaje Nybegynder
08. oktober 2004 - 12:37 #4
//er det ikke bare at flytte der her ud af functionen
// bemærk en lille ændring ved oprettelse af listener og object
var my_mcl = new MovieClipLoader();
myListener = new Object();
myListener.onLoadInit = initTarget;
myListener.onLoadProgress = showProgress;
myListener.onLoadComplete = setPic;
my_mcl.addListener(myListener);
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 12:40 #5
Det er jo i min constructor, - jeg kan ikke smide 'dem' ind i min class definition.
Avatar billede barklund Nybegynder
08. oktober 2004 - 12:41 #6
Aij, det er ikke pænt at lave noget som helst uden for funktionerne. Problemet er blot, at du aldrig får instantieret din my_mcl i din constructor:

Derudover er det skide smart, hvis du istedet bruger this som listener:

    function Loadimage(){
        my_mcl = new MovieClipListener();   
        my_mcl.addListener (this);
        onEnterFrame = checkImage;
    }

Så kan du jo bare kalde de øvrige funktioner ved deres rigtige listener-navne og scope er med garanti rigtigt. See?
Avatar billede barklund Nybegynder
08. oktober 2004 - 12:43 #7
Og hvorfor loader du et billede onEnterFrame?
Avatar billede rohaje Nybegynder
08. oktober 2004 - 12:45 #8
ok- så lærte jeg lidt igen i dag :)
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 12:49 #9
mener du ikke my_mcl = new MovieClipLoader()??

Nå, - men det er fordi jeg kan skal loade når der er en særlig betingelse der er opfyldt som bliver sat af noget andet, - hm i virkeligheden kan jeg vel bare kalde den methode i min Loadimage klasse når jeg har brug for at loade billedet, - dvs. i stedet for noget så sjusket som en global var jeg tjekker onEnterFrame så kalder jeg bare min methode..
Avatar billede barklund Nybegynder
08. oktober 2004 - 12:53 #10
Hehe, der var jeg vist lige lidt foran mig selv :)

Jo, det er selvfølgelig MovieClipLoader. Derudover: JA, du bør først loade dit billede når metoden bliver kaldt - det andet lyder ret skummmelt!

Og du fangede det med this som listener?
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 12:55 #11
akk, - fangede og fangede, - hvis jeg skriver:

  my_mcl = new MovieClipLoader();   
        my_mcl.addListener (this);
       
        this.onLoadInit = initTarget;
        this.onLoadProgress = showProgress;
        this.onLoadComplete = setPic;

er det ikke fordi den er særlig glad for onLoadInit etc.
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 13:00 #12
Altså lige for en sikkerheds skyld, - det jeg mener med onEnterFramen er:

Jeg har en hel masse mc's. Når der en betingelse der bliver opfyldt så skal mit billede loade, - jeg ved dog ikke hvad disse mc's hedder så hvordan skal jeg kunne kalde methoden når jeg ikke ved hvilken instans der skal bruge oplysningen. Det er derfor jeg siger til min instans at den skal stå og holde øje med om betingelsen der gør at den skal loade et billede bliver opfyldt, - så slipper jeg jo for at finde ud af hvilken instans der vil loade et billede, - den holder selv øje :)

Men jeg kan sikkert også gøre det med en listener på en eller anden måde ;)
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 13:01 #13
PS alle mine mc's er potientielle image holdere.
Avatar billede barklund Nybegynder
08. oktober 2004 - 13:23 #14
Nejnejnej... Du misforstår helt. Det laves jo så enkelt som:

import LoadImageManager.as;
class Loadimage extends MovieClip{
    private var my_mcl:MovieClipLoader;
    function Loadimage(){
        my_mcl = new MovieClipLoader()
        my_mcl.addListener (myListener);
        LoadImageManager.addListener(this);
    }
    function loadImage():Void {
        my_mcl.loadClip("http://www.mitBillede.dk/billede.jpg", this);
    }
    function onLoadProgress():Void {
        trace("jeg loader");
    }
    function onLoadComplete():Void {
        trace("slut");
    }
    function onLoadInit(target_mc:MovieClip) {
        var mclProgress:Object = my_mcl.getProgress(this);
        trace(mclProgress.bytesLoaded+" of "+mclProgress.bytesTotal+" bytes loaded");
    }
}

Kan du se hvor nydeligt det bliver?

Og med hensyn til dit andet system, så lave du da bare en LoadImageManager eller noget, som har statiske funktioner til at henholdsvis tilføje et movieclip til at lytte efter, hvornår det skal loade samt en funktion til at loade:

class LoadImageManager {
    static var listeners:Array;
    static function addListener(li:LoadImage) {
          if (!listeners == undefined) listeners = new Array();
          listeners.push(li);
    }
    static function activate() {
          for (var i = 0; i < listeners.length; i++) listeners[i].loadImage();
    }
}

Og så er det straks OOP igen - istedet for alt det andet rod! :)

--
Morten Barklund
Avatar billede barklund Nybegynder
08. oktober 2004 - 13:24 #15
I mit system siger den godt nok til alle billeder, at de skal loade. Det kan du jo bare udvide din manager lidt med, så den kun fortælle de rette LoadImage objekter, at de skal loade.
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 13:28 #16
tak for det, - jeg ser lige på det :)
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 13:44 #17
my_mcl.addListener (myListener);

skal vel erstattes af

LoadImageManager.addListener(this);

ikke?
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 13:50 #18
og  static function addListener(li:LoadImage) skal være

static function addListener(li:Loadimage) (altså klassen)
Avatar billede barklund Nybegynder
08. oktober 2004 - 14:15 #19
Nejnej, du skal både lytte på MovieClipLoader'ens events samt på, hvornår du skal begynde at loade.

Og ja, jeg troede du havde kaldt din klasse for LoadImage, der jo ville være standardiseret klasse-navngivning ;)
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 14:17 #20
ok, - har fattet det nu, - det er jo fordi my_mcl.addListener (myListener); skal være my_mcl.addListener (this) :)
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 14:27 #21
ka du så ikke bare lige sige mig en sidste ting, - der hvor jeg ville sætte min globale var som min onenterframe ting ville holde øje med, - hvordan er syntaksen så hvis jeg skal kalde min LoadImageManager.activate() metode, - er det:

nyInstans:LoadImageManager = new LoadImageManager();
og så
nyInstans.activate();
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 14:34 #22
ok så da det skal svarer til et flag så f.eks.
nyInstans.activate(true/false); og så arbejde videre med den boolean i activate metoden.

Gør det noget at jeg laver activate metoden public i stedet for static, - jeg vil nemlig gerne kalde den fra en helt 3. klasse ;)
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 14:34 #23
eller er det noget vrøvl ;)
Avatar billede barklund Nybegynder
08. oktober 2004 - 14:48 #24
At den er static betyder, at den *alle* steder kan kaldes som LoadImageManager.activate() - så behøver man slet ikke instantiere klassen, hvilket der heller ikke er nogen grund til!
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 14:52 #25
nå ja! tak.
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 14:59 #26
ok, det sidste jeg ikke helt forstår er:

static var listeners:Array;
    static function addListener(li:ZoomIt) {
                  if (!listeners == undefined){
              listeners = new Array();
          }
                listeners.push(li);
        trace("listeners = "+listeners);


min listeners array er og bliver:

listeners = undefined
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 15:00 #27
ups jeg mener LoadImage ;)
Avatar billede barklund Nybegynder
08. oktober 2004 - 15:04 #28
Fjern lige det dér ! :)
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 15:05 #29
Halløj!! så sker der ting og sager :)
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 15:07 #30
shit, - nu crashede hele molevitten ;)
Avatar billede barklund Nybegynder
08. oktober 2004 - 15:53 #31
Well, du loader det samme movieclip ind rimeligt mange gange og der vælter jo progress traces ud over det hele, så det skal nok struktureres lidt bedre - og du skal så kun aktivere de movieclips, der rent faktisk skal loade :)
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 17:44 #32
yes, sir, - smid et svar og du får points, - men det blir' nok ikke sidste gang jeg plager dig ;)
Avatar billede barklund Nybegynder
08. oktober 2004 - 18:39 #33
Oki ;)
Avatar billede barklund Nybegynder
08. oktober 2004 - 19:48 #34
Orv, tark for points
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 19:51 #35
D var så lidt, - tænk engang du har faktisk hjulpet mig i flere år!!
Avatar billede barklund Nybegynder
08. oktober 2004 - 20:04 #36
Hehe, har vist hjulpet nogle stykker. Har deltaget i lidt over 2100 spørgsmål herinde nu :)
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 20:06 #37
fedt at du gider :)
Avatar billede barklund Nybegynder
08. oktober 2004 - 20:11 #38
Kom an!
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 20:12 #39
hehe
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 20:24 #40
Jeg får en lidt sjov error meddelelse, - og den forvinder hvis jeg lukker flash og starter igen, - uden at have rørt koden.

**Error** C:\LoadImage.as: Line 2: The name of this class, 'LoadImage', conflicts with the name of another class that was loaded, 'LoadImage'.
    class LoadImage extends MovieClip{

Total ActionScript Errors: 1     Reported Errors: 1
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 20:25 #41
men den kommer altså kun nogen gange ;)
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 20:27 #42
hvis jeg så kører min hovedfil så er alt godt igen.
Avatar billede kalleballe Nybegynder
08. oktober 2004 - 20:27 #43
Nå, - skidt med det, - tak for hjælpen og go' weekend ;)
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