{lang: 'de'}
Flashhilfe.de - Flash Community

Events - Verständniss Frage [Flash 10]

 


AntwortenRegistrieren Seite1  

Koljan#1
Benutzerbild von Koljan
Beiträge: 44
Wohnort: Duisburg
Registriert: Mar 2005

15.04.2011, 09:58

Hallo liebe Community Mitglieder, ich habe eine Verständniss Frage zu Thema Events.
Und zwar geht es um folgenden Beispiel.:

eine Klasse MyClass erzeugt ein Objekt g von der Klasse Gallery.  Gallery klasse lädt Bilder und packt die in ein array. Nun möchte ich ein Eventlistener benutzen der in myClass auf g Objekt lauscht und sobald Gallery ferig ist mit laden soll MyClass sich den array mit z.B. g.getImageArray() holen;

Ich habe schon sämtliche Bücher und Tutorials durschgelesen, aber ich kriegs einfach nicht hin!
So wie ich verstanden habe , muss Gallery sobald es fertig ist mit laden dispatchEvent(new Event "fertig",true, true)); aufrufen. Und in MyClass soll sowas sein wie g.addEventListener("fertig",dosomething);

Nur leider hört MyClass nix. Bitte helft mir, ich weiß, dass events eines der wichigsten Aspekten in AS3 ist und das bring mich dann super viel weiter:)

Dankeschön im Voraus!
fotofoto#2
Benutzerbild von fotofoto
Beiträge: 22
Registriert: Mar 2011

15.04.2011, 10:16

Hi

Also gleich vorweg bin auch Anfänger also bitte nicht gleich schlagen falls ich das jetzt falsch verstanden hab oder völligen mist erzähl ... *g*

Meiner Meinung nach müsste es doch so gehen:

g.addEventListener(Event.COMPLETE), doit);

Der EventListener sollte warten bis das Event g fertig ist und dann die Funktion
doit ausführen.

In die Funktion doit kannst du dann deine Array abfragen.

function doit (event:Event)
{
Myclass=g.getImageArray()
}

lg
Patrick
Solon#3
Benutzerbild von Solon
Beiträge: 57
Registriert: Aug 2006

15.04.2011, 10:34

also wenn du die Bilder mittels Loader in dein Array lädtst, kannst du nach jedem Bild folgendes Event auslösen:

ActionScript:
1bildLoader.addEventListener(Event.COMPLETE, auszuführendeFunktion);


Wenn du eine Funktion erst dann starten willst, wenn ALLE Bilder geladen sind, dann versuch es mal etwa in der Art:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var i:Number;
function bilderLaden():void {
     bilderLoader:Loader = new Loader();
     bilderLoader.addEventListener(Event.COMPLETE, probe);
     try {
        bilderLoader.load(new URLRequest("http://www.seite.de/bildNr"+i+".jpg"));
     } catch (error:Error) {
        trace("Fehler beim Laden");
     }
     i++;
 
     function probe():void {
        if (i != bilderArray.length) {
           bilderLaden();
        } else {
           bilderLadenFertig();
        }
     }
}

function bilderLadenFertig():void {
     trace("alle Bilder wurden geladen");
}


Hab den Script jetzt nicht getestet aber sollte funktionieren :)

Ich hoffe ich hab deine Frage richtig verstanden xD
Geändert von Solon am 15.04.11 um 10:37 Uhr
Koljan#4
Benutzerbild von Koljan
Beiträge: 44
Wohnort: Duisburg
Registriert: Mar 2005

Themenautor/in

15.04.2011, 11:00

Hallo , Danke an Euch beiden!

AnSolon:

Genau das macht meine Klasse Galary, objekt dieser Klasse wird in MyClass erzeugt.

und genau von dort aus möchte ich den Array holen. Nur wenn ich das direkt mache nach dem ich objekt erzeugt habe, kriege ich leeres array da dies noch nicht die bilder geladen hat!

   public class MyClass {
var g:Gallery = new Gallery("bild1.jpg","bild2.jpg","bild3.jpg");
var images:Array = g.getArray();
trace(images.length) //liefert 0;

Daher möchte ich, dass g.getArray() erst dann aufgerufen wird wenn das letzte bild in array von g gepackt wurde.


An fotofoto:
der Ansatz wäre gut, nur leider geht es so nicht. Ich meine mit Complete kann man nur über contentLoaderInfo arbeiten und dass gild für ein loader. Aber ich erzeuge ein Objekt . Mag sein, dass ich mich irre
Solon#5
Benutzerbild von Solon
Beiträge: 57
Registriert: Aug 2006

15.04.2011, 11:31

deine Klasse ist auch irgendwie komisch aufgebaut. In der Klasse selbst erstelle ich persönlich nur die Variablen. Mit Werten versehe ich die dann erst in der Constructor-function.

kurzes Beispiel:

ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package{
     //Hier kannst du alles importieren, was du brauchst
   import flash.display.DisplayObject
     
     public class myClass extends Sprite{
        
        //Hier werden die nötigen Variablen erstell, aber noch nicht befüllt
      var arr:Array;
        var num:Number;
        
        public function myClass (bilderArray:Array, zahl:Number):void{
           
           //Das ist jetzt die Constructor-Funktion. Hier befüllst du deine "Grund-Variablen"
         //und erstellst gegebenen Falls Childs oder was auch immer
         this.arr = bilderArray;
           this.num = zahl;
        }
        
        private function test():void{
           //private Funktionen können nur von der Klasse selber aufgerufen werden
         //du könntest hier zumBeispiel deiner Bilder laden lassen oder so
      }
        
        public function test2():Array{
           //public functions können auch von außerhalb aufgerufen werden.
         //Hier könntest du zum Beispiel dein bilderArray erzeugen und
         //ausgeben lassen
         this.arr.push("neuer Eintrag");
           //return gibt dein Array an die Funktion zurück, die diese Funktion hier aufgerufen hat
         return(this.arr);
        }
     }
}


Wenn du deine Klasse jetzt in der Art erstellt hast müsstest du dein Array auf folgende Weise bekommen können:

Script in der .fla:

ActionScript:
1
2
g:myClass = new myClass(bilderNamen, 5);
var bilderArray:Array = g.test2();


Total abstraktes Beispiel aber vielleicht liegts ja an der Form deiner Klasse.
fotofoto#6
Benutzerbild von fotofoto
Beiträge: 22
Registriert: Mar 2011

15.04.2011, 11:49

hm...

Komm da nicht 100% mit aber schreib mal was ich vermute.

Also du hast eine Klasse Gallery in der etwas das steht was Solon geschrieben hat.

Diese rufst du in MyClass auf ob dein Code dazu stimmt kann ich nicht sagen habs
nicht so mit klassen ...

Vielleicht stimmt auch irgend was in dem Code in Gallery nicht somit würde es erklären
warum das Array nicht befüllt wird oder du bindest die klasse (objekt) falsch ein wie gesagt dazu kann ich leider nicht wirklich viel sagen.

Warum packst du eine klasse in die andere pack doch den code direkt in MyClass ...
(Sollte aber egal sein)

Aber wenn dein so code so aussieht wie der von Solon hast du doch deinen loader
in seien fall wäre es bilderLoader.

Somit müsste auch wie er beschrieben hat auch ein listener (bzw. Aufruf) mit EventComplete
funktionieren.

bildLoader.addEventListener(Event.COMPLETE, auszuführendeFunktion);

lg
Patrick
Koljan#7
Benutzerbild von Koljan
Beiträge: 44
Wohnort: Duisburg
Registriert: Mar 2005

Themenautor/in

15.04.2011, 11:57

Genauso mach ich es auch, problemm dabei ist, dass die bilder zu dem zeitpunkt noch nicht im array vorliegen.  Die wärden ja geladen wärend der objekt g schon existiert. Daher ist Array den ich von Test2 bekomme zu dem zeitPunkt leer.
Aus diesem grund dachte ich, dass ein listener darauf höhren soll wann enlich die bilder im array vorliegen und diesen dann laden.

Habe gerade ein beispiel gebaut und angehängt. Schaut Euch den mal bitte an. Müsste dann klar sein wie ich es meine.

Angehängte Dateien:
Komprimierte Datei event.zip6.52 KB
Geändert von Koljan am 15.04.11 um 11:58 Uhr
Solon#8
Benutzerbild von Solon
Beiträge: 57
Registriert: Aug 2006

15.04.2011, 12:04

mhm kann mir deine Datei leider nicht ansehen, da ich gerade nur Flash 9 zur Verfügung habe. Aber ich werde mal einen Blick auf deine Klassen werfen.
Geändert von Solon am 15.04.11 um 12:05 Uhr
Solon#9
Benutzerbild von Solon
Beiträge: 57
Registriert: Aug 2006

15.04.2011, 12:07

Glaube einen Fehler in main.as gefunden zu haben.

ActionScript:
1
2
3
4
5
6
private function init(){
           var l:ImageLoader = new ImageLoader(links);
           trace("lausche...")
           l.addEventListener(LoadEvent.COMPLETE, getArray);
           
        }


das Event LoadEvent gibts glaube ich nicht. Also wenn ich einen Loader mit nem EventListener verknüpfe dann immer mit

ActionScript:
1Loader.addEventListener(Event.COMPLETE, funktion);
Koljan#10
Benutzerbild von Koljan
Beiträge: 44
Wohnort: Duisburg
Registriert: Mar 2005

Themenautor/in

15.04.2011, 12:23

Habe gerade festgestellt, dass ich alles richtig gemacht habe. Ich musste nur ein bild laden, sonst war wurde dispatcher früher ausgeführt als der listener angefangen hat zu hören.

Ereiterte version anbei, für alle die das gleiche problem haben.

Noch ein mal vielen Dank an Euche! Ich liebe diese Community! Ihr seit Super!

Angehängte Dateien:
Komprimierte Datei event2.rar163.12 KB
Koljan#11
Benutzerbild von Koljan
Beiträge: 44
Wohnort: Duisburg
Registriert: Mar 2005

Themenautor/in

15.04.2011, 12:24

Den event LoadEvent habe ich selbst geschrieben , er implementiert die Basisklasse Event

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2024 Sebastian Wichmann - Flashhilfe.de