Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 12-05-2009, 03:24   #1 (permalink)
Neuer User
 
Benutzerbild von Vokator
 
Registriert seit: Apr 2009
Beiträge: 91
Question Event-Funktion mit Parametern

Stellt euch vor ihr hättet einen Eventlistener mit einer Funktion:

addEventListener(Event.ENTER_FRAME, funktion);

Die Funktion hat aber auch mehrere Parameter:

funktion(evt:Event,p1:Number,p2:Number){

}


IST ES MÖGLICH PARAMETER WEITERZUGEBEN ?
Wie hier :


addEventListener(Event.ENTER_FRAME, funktion(parameter1,parameter2));

Es funktioniert aber auch rein garnichts
Wenn es nicht möglich ist...
Gibt es einen Workaround?

Greets
Vokator

Geändert von Vokator (12-05-2009 um 03:25 Uhr)
Vokator ist offline   Mit Zitat antworten
Alt 12-05-2009, 03:38   #2 (permalink)
Neuer User
 
Benutzerbild von Vokator
 
Registriert seit: Apr 2009
Beiträge: 91
Hilfe

Geändert von Vokator (12-05-2009 um 03:45 Uhr)
Vokator ist offline   Mit Zitat antworten
Alt 12-05-2009, 08:57   #3 (permalink)
lebt in stereo
 
Benutzerbild von figure8
 
Registriert seit: Mar 2008
Ort: karlsruhe
Beiträge: 1.093
warum willst du bei 'nem enterframe parameter mitgeben? dann kann man sich nen workaround überlegen.
ps: um halb5 schlafen normale menschen. da hilft auch kein bold "hilfe". und benutz bitte die code-tags.
__________________
* Flash-JunkieMusiker & Grafiker

# Marvin Blase
# Speaker, Author, Silly Billy.
# @beautifycode

Geändert von figure8 (12-05-2009 um 09:08 Uhr)
figure8 ist offline   Mit Zitat antworten
Alt 12-05-2009, 09:14   #4 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 1
mahlzeit...

soweit ich weiß funktioniert die parameter übergabe folgendermaßen:

addEventListener ( Event.ENTERFRAME, function () : void { funktion(p1,p2,p3); } );

function funktion (p1:*,p2:*,p3:*) : void {

}


vielleicht hilft dir das.

tschuuus
tazka ist offline   Mit Zitat antworten
Alt 12-05-2009, 09:16   #5 (permalink)
Raven-Kid
 
Benutzerbild von [RK]
 
Registriert seit: Feb 2006
Beiträge: 350
Ansich sollte es eigentlich immer möglich sein auch andere Wege zu finden. Die wohl am häufigsten passende wäre die target Eigenschaft des ohnehin übergebenen Event-Object zu verwenden um das Dispatcher-Object zu erhalten, welches wiederum Eigenschaften bereithält auf die man öffentlich zugreifen kann. So kannst du innerhalb des Callbacks auf Eigenschaften zugreifen, ohne den Dispatcher explizit zu kennen. (Typecasten musst du evt.)

Andere Möglichkeit wäre (und das ist wohl die hübschere) ein eigenes Event zu schreiben, welches die zu übergebenen Eigenschaften bereithält. Das eigene Event kann ja auch von den vorgegebenen Events erben (MouseEvent zb)

Ansonnsten könnte man sich sowieso einen eigenes langsames EventHandling-System basteln, wo man dann allerdings auch der Callback-Funktion Parameter übergeben kann x)
[RK] ist offline   Mit Zitat antworten
Alt 12-05-2009, 11:37   #6 (permalink)
Neuer User
 
Benutzerbild von Vokator
 
Registriert seit: Apr 2009
Beiträge: 91
test

Geändert von Vokator (12-05-2009 um 11:39 Uhr)
Vokator ist offline   Mit Zitat antworten
Alt 12-05-2009, 11:39   #7 (permalink)
Neuer User
 
Benutzerbild von Vokator
 
Registriert seit: Apr 2009
Beiträge: 91
Zitat:
Zitat von [RK] Beitrag anzeigen
Ansich sollte es eigentlich immer möglich sein auch andere Wege zu finden. Die wohl am häufigsten passende wäre die target Eigenschaft des ohnehin übergebenen Event-Object zu verwenden um das Dispatcher-Object zu erhalten, welches wiederum Eigenschaften bereithält auf die man öffentlich zugreifen kann. So kannst du innerhalb des Callbacks auf Eigenschaften zugreifen, ohne den Dispatcher explizit zu kennen. (Typecasten musst du evt.)

Andere Möglichkeit wäre (und das ist wohl die hübschere) ein eigenes Event zu schreiben, welches die zu übergebenen Eigenschaften bereithält. Das eigene Event kann ja auch von den vorgegebenen Events erben (MouseEvent zb)

Ansonnsten könnte man sich sowieso einen eigenes langsames EventHandling-System basteln, wo man dann allerdings auch der Callback-Funktion Parameter übergeben kann x)
Zitat:
Zitat von tazka Beitrag anzeigen
mahlzeit...

soweit ich weiß funktioniert die parameter übergabe folgendermaßen:

addEventListener ( Event.ENTERFRAME, function () : void { funktion(p1,p2,p3); } );

function funktion (p1:*,p2:*,p3:*) : void {

}


vielleicht hilft dir das.

tschuuus
Zitat:
Zitat von figure8 Beitrag anzeigen
warum willst du bei 'nem enterframe parameter mitgeben? dann kann man sich nen workaround überlegen.
ps: um halb5 schlafen normale menschen. da hilft auch kein bold "hilfe". und benutz bitte die code-tags.
Okay ein BEISPIEL :

Loader laden ein Bilder aus einem Array

loader.addEventListener(Event.COMPLETE, zeigeBild);

woher soll die funktion zeigeBild wissen welches Bild genau gezeigt werden soll?
Was ist wenn das Laden der Bilder unterschiedlich ist bei jedem Bild
und das letzte oder das mittlere vorher COMPLETE sagt...

Man bräuchte etwas wie :

Code:
loader.addEventListener(Event.COMPLETE, zeigeBild(bildID));

function zeigeBild(bildID){
// ich weiß welches bild ich anzeigen soll(bildID);
}
PRAXISBEISPIEL :

www.aeiko.net

siehe die thumbnails werden getrennt geladen <<<

Geändert von Vokator (12-05-2009 um 11:41 Uhr)
Vokator ist offline   Mit Zitat antworten
Alt 12-05-2009, 12:00   #8 (permalink)
Raven-Kid
 
Benutzerbild von [RK]
 
Registriert seit: Feb 2006
Beiträge: 350
ActionScript:
  1. var myloader:Loader = new Loader();
  2.     myloader.contentLoaderInfo.addEventListener( Event.INIT, this.onComplete, false, 0, true );
  3.    
  4.  
  5. private function onComplete( a_event:Event ):void
  6. {
  7.     // Direkt:
  8.     var loaded_data_direct:DisplayObject = myloader.content;
  9.    
  10.     // Indirekt:
  11.     var loader:Loader = a_event.target as Loader;
  12.     var loaded_data_target:DisplayObject = loader.content;
  13. }

Du könntest aber auch den Loader in einer eigenen Klasse kapseln, welches wiederum ein eigenes Event dispatched das die Referenz zum geladene DisplayObject als Eigenschaft besitzt. Diese eigene Event-Klasse kann dann auch weitere Informationen bereithalten die pro geladenem Bild relevant erscheinen. Zb. Titel, Beschreibung oder ähnliches.

Aber wie gesagt funktioniert es immer ohne Parameterübergabe.
Zumin. behaupte ich das jetzt mal aalglatt. x)

Geändert von [RK] (12-05-2009 um 12:05 Uhr)
[RK] ist offline   Mit Zitat antworten
Alt 12-05-2009, 12:29   #9 (permalink)
lebt in stereo
 
Benutzerbild von figure8
 
Registriert seit: Mar 2008
Ort: karlsruhe
Beiträge: 1.093
Zitat:
Zitat von Vokator Beitrag anzeigen
Okay ein BEISPIEL :

Loader laden ein Bilder aus einem Array

loader.addEventListener(Event.COMPLETE, zeigeBild);

woher soll die funktion zeigeBild wissen welches Bild genau gezeigt werden soll?
kuckst du hier:
http://www.flashforum.de/forum/showt...98#post1858198
__________________
* Flash-JunkieMusiker & Grafiker

# Marvin Blase
# Speaker, Author, Silly Billy.
# @beautifycode
figure8 ist offline   Mit Zitat antworten
Alt 12-05-2009, 16:16   #10 (permalink)
Neuer User
 
Benutzerbild von Vokator
 
Registriert seit: Apr 2009
Beiträge: 91
Zitat:
Zitat von figure8 Beitrag anzeigen
hey da gehts garnicht darum
ich habe ja bereits eine slideshow
sie lädt aber jede thumb NACHEINANDER

d.h COMPLETE => nächstesBild => COMPLETE => nächstesBild...

aber wie kriegt man das so hin :

lade alle bilder gleichzeitig();
gebe jedem loader eventlistener
und die funktion revealImage

aber jedes mal wenn COMPLETE auftritt
zeigt er das erst gestartete bild
auch wenn es nicht KOMPLETT GELADEN IST

weil er ja nicht weiß welches bild genau geladen wurde

deswegen braucht man etwas wie...

revealImage(imageID);

aber das kann man nicht in den (Event.COMPLETE, "...()");
reintun oder?
Vokator ist offline   Mit Zitat antworten
Alt 13-05-2009, 12:32   #11 (permalink)
Neuer User
 
Benutzerbild von maschka
 
Registriert seit: Jun 2003
Beiträge: 194
Zitat:
Zitat von Vokator Beitrag anzeigen
Okay ein BEISPIEL :

Loader laden ein Bilder aus einem Array

loader.addEventListener(Event.COMPLETE, zeigeBild);

woher soll die funktion zeigeBild wissen welches Bild genau gezeigt werden soll?
Was ist wenn das Laden der Bilder unterschiedlich ist bei jedem Bild
und das letzte oder das mittlere vorher COMPLETE sagt...

Man bräuchte etwas wie :

Code:
loader.addEventListener(Event.COMPLETE, zeigeBild(bildID));

function zeigeBild(bildID){
// ich weiß welches bild ich anzeigen soll(bildID);
}
PRAXISBEISPIEL :

www.aeiko.net

siehe die thumbnails werden getrennt geladen <<<


Also dein Beispiel könntest du mit einem CustomEvent-lösen: CustomEvent in AS3

dem kannst du ja beliebige Eigenschaften einbauen, wie bspw. die Bildnummer. Du darfst dann natürlich nicht auf COMPLETE, sondern nur auf deinen eigenen CustomEvent hören, den du auch selbst werfen musst.
maschka ist offline   Mit Zitat antworten
Alt 15-05-2009, 12:28   #12 (permalink)
Neuer User
 
Registriert seit: May 2009
Beiträge: 12
Zitat:
IST ES MÖGLICH PARAMETER WEITERZUGEBEN ?
Wie hier :

addEventListener(Event.ENTER_FRAME, funktion(parameter1,parameter2));
jo, isses mit ner anonymen funktion, die du als proxy verwendest, wie tatzka schon angedeutet hat, allerdings muss die anonyme funktion die parameter-signatur des events realiseren.. also so:


Zitat:
addEventListener( Event.Complete, function ( e : Event ) : void { handlerFunction( e, p1, p2, p3); } );

public function handlerFunction( e : Event, p1:*, p2:*,p3:* ) : void {
}
}
zu beachten ist, das du in der anonymen funktion nicht auf this zugreifst ( da anderer kontext ).

diesem konstrukt sollte man aber custom-events aufgrund der besseren lesbarkeit vorziehen.

gruss,
robbe.
darobbe ist offline   Mit Zitat antworten
Alt 16-05-2009, 09:21   #13 (permalink)
Neuer User
 
Benutzerbild von Vokator
 
Registriert seit: Apr 2009
Beiträge: 91
Zitat:
Zitat von darobbe Beitrag anzeigen
jo, isses mit ner anonymen funktion, die du als proxy verwendest, wie tatzka schon angedeutet hat, allerdings muss die anonyme funktion die parameter-signatur des events realiseren.. also so:




zu beachten ist, das du in der anonymen funktion nicht auf this zugreifst ( da anderer kontext ).

diesem konstrukt sollte man aber custom-events aufgrund der besseren lesbarkeit vorziehen.

gruss,
robbe.
GENAU DAS HAB ICH GESUCHT !
Danke Genie ;D !
Vokator ist offline   Mit Zitat antworten
Alt 16-05-2009, 10:34   #14 (permalink)
Flashworker
 
Benutzerbild von sebastian
 
Registriert seit: Nov 2001
Ort: Wiesbaden
Beiträge: 10.945
Wie schon gesagt wurde:

-Ein eigenes Event, das eine entsprechende Eigenschaft hat
-Den Wert irgendwo im Model speichern und über das Event nur informieren,
dass sich was geändert hat
sebastian ist offline   Mit Zitat antworten
Alt 16-05-2009, 10:52   #15 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.139
Anonyme Funktionen sind schlecht... die Listener wird man nicht mehr los -> schlechter Programmierstil.
ActionScript:
  1. package
  2. {
  3.  
  4.     import flash.display.Sprite;
  5.     import flash.events.IEventDispatcher;
  6.    
  7.     import fs.examples.events.DataEvent;
  8.  
  9.     public class SimpleEventExample extends Sprite
  10.     {
  11.  
  12.         public function SimpleEventExample()
  13.         {
  14.             super();
  15.             addEventListener(DataEvent.DATA, dataEventListener);
  16.             dispatchEvent(new DataEvent(DataEvent.DATA, 1, 2, 3));
  17.         }
  18.  
  19.         protected function dataEventListener(event:DataEvent):void
  20.         {
  21.             IEventDispatcher(event.target).removeEventListener(
  22.                     DataEvent.DATA, dataEventListener);
  23.             switch(event.type)
  24.             {
  25.                 case DataEvent.DATA:
  26.                 {
  27.                     processData(event.argument1, event.argument2,
  28.                             event.argument3);
  29.                 }
  30.             }
  31.         }
  32.  
  33.         protected function processData(argument1:int, argument2:int,
  34.                 argument3:int):void
  35.         {
  36.             trace("argument1:", argument1, ", argument2:", argument2,
  37.                 ", argument3:", argument3);
  38.         }
  39.     }
  40. }
ActionScript:
  1. package fs.examples.events
  2. {
  3.  
  4.     import flash.events.Event;
  5.  
  6.     public class DataEvent extends Event
  7.     {
  8.  
  9.         public static const DATA:String = "data";
  10.  
  11.         private var _argument1:int;
  12.  
  13.         private var _argument2:int;
  14.  
  15.         private var _argument3:int;
  16.  
  17.         public function DataEvent(type:String, argument1:int, argument2:int,
  18.                 argument3:int, bubbles:Boolean=false,
  19.                 cancelable:Boolean=false)
  20.         {
  21.             super(type, bubbles, cancelable);
  22.             _argument1 = argument1;
  23.             _argument2 = argument2;
  24.             _argument3 = argument3;
  25.         }
  26.  
  27.         public function get argument1():int
  28.         {
  29.             return _argument1;
  30.         }
  31.  
  32.         public function get argument2():int
  33.         {
  34.             return _argument2;
  35.         }
  36.  
  37.         public function get argument3():int
  38.         {
  39.             return _argument3;
  40.         }
  41.     }
  42. }
Omega Psi ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele