//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);
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..
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 ;)
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! :)
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.
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();
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!
static var listeners:Array; static function addListener(li:ZoomIt) { if (!listeners == undefined){ listeners = new Array(); } listeners.push(li); trace("listeners = "+listeners);
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 :)
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{
Nå, - skidt med det, - tak for hjælpen og go' weekend ;)
Synes godt om
Ny brugerNybegynder
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.