Zurück   Flashforum > Flash > ActionScript > Softwarearchitektur und Entwurfsmuster

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 06-01-2003, 19:06   #1 (permalink)
filmtip: snatch
 
Registriert seit: Oct 2001
Beiträge: 1.562
asbroadcaster

hi all

hier eine möglichkeit, das gleiche onEnterFrame-Event mehrmals zu nutzen.

hat 2 Vorteile:
-saves cpu
-der code kann besser strukturiert werden

ActionScript:
  1. ASBroadcaster.initialize(MovieClip);
  2. mc = this.createEmptyMovieClip("EHSource", 4444);
  3.  
  4.  
  5. MovieClip.addListener(mc1_mc)
  6. MovieClip.addListener(mc2_mc)
  7. mc1_mc.onMotor = function() {
  8.     this._x += 2;
  9. };
  10. mc2_mc.onMotor = function() {
  11.     this._x -= 2;
  12. };
  13.  
  14. mc.onEnterFrame = function() {
  15.     MovieClip.broadcastMessage("onMotor");
  16. };


vielleicht ja noch nicht allen bekannt.

gruss skyla
Skyla ist offline   Mit Zitat antworten
Alt 06-01-2003, 19:44   #2 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
ja das ist sehr schön

viel interessanter finde ich, das man so auch Nicht-MovieClips mit einem onEnterFrame versehen kann:
ActionScript:
  1. ASBroadcaster.initialize(MovieClip);
  2. this.createEmptyMovieClip("oEF", 10000);
  3. this.oEF.onEnterFrame = function() {
  4.     MovieClip.broadcastMessage("onEnterFrame");
  5. };
  6. //
  7. //
  8. myArray = ["a", "b", "c", "d", "e"];
  9. myArray.onEnterFrame = function() {
  10.     trace(this[random(this.length)]);
  11. };
  12. MovieClip.addListener(myArray);
aber das ist wohl für die meisten OOPler nichts mehr neues.
zuerst in derartiger form von Robert Penner veröffentlicht, glaube ich.

gruss
michael

Geändert von michael (06-01-2003 um 19:45 Uhr)
michael ist offline   Mit Zitat antworten
Alt 07-01-2003, 08:33   #3 (permalink)
[Matthias K.] - Moderator
 
Benutzerbild von Madokan
 
Registriert seit: Jun 2001
Ort: Berlin/Germany - and the hole World !
Beiträge: 9.971
michael zwar nichts neues aber ich bin sicher immer wieder gern gesehen.

Hinweis: Im Umgang mit dem ASBroadcaster solltet Ihr etwas vorsicht walten lassen. In einigen Flash Player Versionen (6,0,29,0 u. 6,0,40,0) gab es auf WinME u. Win98 Systemabstürze.

In wie weit der ASBroadcaster von macromedia beibehalten wird steht auch noch nicht fest. Lassen wir uns mal überraschen.

Liebe Grüsse
Matze K.
Madokan ist offline   Mit Zitat antworten
Alt 07-01-2003, 12:24   #4 (permalink)
nerdig working
 
Benutzerbild von michael
 
Registriert seit: Jul 2001
Ort: Hamburg
Beiträge: 5.832
ihhh Abstürze?
danke für den hinweis, war mir auch noch nicht bekannt.
naja, mit undokumentiertem sollte man immer vorsichtig sein


gruss
michael
michael ist offline   Mit Zitat antworten
Alt 07-01-2003, 12:59   #5 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Da die internen Listener auch alle mit ASBroadcaster arbeiten,
benutzt du ihn ja automatisch. Abstürze sind mir auch nicht
bekannt, hast du ein Beispiel dafür ?

Wenn man kein Vertrauen in den eingebauten
Broadcaster hat, kann man sich auch leicht einen
selber bauen.

mfg r.

Geändert von bokel (07-01-2003 um 13:06 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 07-01-2003, 15:22   #6 (permalink)
[Matthias K.] - Moderator
 
Benutzerbild von Madokan
 
Registriert seit: Jun 2001
Ort: Berlin/Germany - and the hole World !
Beiträge: 9.971
bokel: Vorsicht die internen Listener besitzen jedoch auch eine höhere Priorität, dies scheint auch Auswirkung auf die Ausführung (Stabilität) zu haben. Was mich nur stutzig macht ist die Tatsache, dass dieses Problem nicht auf allen Windows-Systemen durchweg zu finden ist. Bei WinNT oder WinXP hatte ich bisher noch nicht einen Abschuss.

Hab mal spassehalber den Code hier aus dem Thread genommen und unter dem Player 6,0,29,0 gab es auf WinME einen sauberen Crash - nix ging mehr.

Ich muss jedoch gestehen, dass auch mir das ganze doch noch ein Rätsel ist. Aber ich bleib dran!

Liebe Grüsse
Matze
Madokan ist offline   Mit Zitat antworten
Alt 07-01-2003, 17:06   #7 (permalink)
filmtip: snatch
 
Registriert seit: Oct 2001
Beiträge: 1.562
Danke für den Hinweis, Matze.

@Bokel: wie baust du einen eigenen broadcaster ?
Skyla ist offline   Mit Zitat antworten
Alt 07-01-2003, 18:27   #8 (permalink)
Flash Perfektionist
 
Benutzerbild von lp400
 
Registriert seit: Jun 2002
Ort: Schortens
Beiträge: 199
Hi

Branden Hall hat schon einen EventBroardcaster gebaut. Funktioniert super:

ActionScript:
  1. _global.EventBroadcaster = new Object();
  2.  
  3. EventBroadcaster.initialize = function(obj){
  4.     obj._listeners = new Array();
  5.     obj.broadcastMessage = this._broadcastMessage;
  6.     obj.addListener = this._addListener;
  7.     obj.removeListener = this._removeListener;
  8. }
  9.  
  10. EventBroadcaster._broardcastMessage = function(){
  11.     var eventName = arguments.shift();
  12.     var list = this._listeners;
  13.     var max = list.length;
  14.     for (var i=0; i<max; ++i){
  15.         list[i][eventName].apply(list[i], arguments);
  16.     }
  17. }
  18.  
  19. EventBroadcaster._addListeners = function(){
  20.     this.removeListener(obj);
  21.     this_listeners.push(obj);
  22.     return (true);
  23. }
  24.  
  25. EventBroadcaster._removeListeners = function(){
  26.     var list = this._listeners;
  27.     var i = list.length;
  28.     while (i--){
  29.         if (list[i] == obj){
  30.             list.splice(i, 1);
  31.             return (true);
  32.         }
  33.     }
  34.     return (false);
  35. }

Gruß, Herbert
lp400 ist offline   Mit Zitat antworten
Alt 07-01-2003, 23:26   #9 (permalink)
filmtip: snatch
 
Registriert seit: Oct 2001
Beiträge: 1.562
Hi Herbert, vielen Dank.
Bei mir klappts weniger gut;
zB auf diesen Test:
ActionScript:
  1. Mouth = new Object();
  2. Ear = new Object();
  3. EventBroadcaster.initialize(Mouth);
  4. Ear.onSpeak = function() {
  5.     trace("I hear you");
  6. };
  7. Mouth._addListeners(Ear);
  8. Mouth._broadcastMessage("onSpeak");

gruss stephan
Skyla ist offline   Mit Zitat antworten
Alt 08-01-2003, 06:37   #10 (permalink)
Flash Perfektionist
 
Benutzerbild von lp400
 
Registriert seit: Jun 2002
Ort: Schortens
Beiträge: 199
@Skyla

Oh mann, da habe ich ja ne Menge Tippfehler eingebaut.
Sorry

Hier ist noch einmal Dein Beispiel, das jetzt funktioniert:

ActionScript:
  1. _global.EventBroadcaster = new Object();
  2.  
  3. EventBroadcaster.initialize = function(obj) {
  4.     obj._listeners = new Array();
  5.     obj.broadcastMessage = this._broadcastMessage;
  6.     obj.addListener = this._addListener;
  7.     obj.removeListener = this._removeListener;
  8. }
  9.  
  10. EventBroadcaster._broadcastMessage = function() {
  11.     var eventName = arguments.shift();
  12.     var list = this._listeners;
  13.     var max = list.length;
  14.     for (var i = 0; i<max; ++i) {
  15.         list[i][eventName].apply(list[i], arguments);
  16.     }
  17. };
  18. EventBroadcaster._addListener = function(obj) {
  19.     this.removeListener(obj);
  20.     this._listeners.push(obj);
  21.     return (true);
  22. }
  23.  
  24. EventBroadcaster._removeListener = function(obj) {
  25.     var list = this._listeners;
  26.     var i = list.length;
  27.     while (i--) {
  28.         if (list[i] == obj) {
  29.             list.splice(i, 1);
  30.             return (true);
  31.         }
  32.     }
  33.     return (false);
  34. }
  35.  
  36. Mouth = new Object();
  37. Ear = new Object();
  38. EventBroadcaster.initialize(Mouth);
  39. Ear.onSpeak = function() {
  40.     trace("I hear you");
  41. };
  42. Mouth.addListener(Ear);
  43. Mouth.broadcastMessage("onSpeak");

Zur Sicherheit lege ich noch die FLA bei.

Gruß, Herbert
Angehängte Dateien
Dateityp: zip eventbroadcaster test.zip (2,4 KB, 69x aufgerufen)
lp400 ist offline   Mit Zitat antworten
Alt 08-01-2003, 08:56   #11 (permalink)
filmtip: snatch
 
Registriert seit: Oct 2001
Beiträge: 1.562
@IP400: jetzt ist fein. Dank Dir bestens; kann ich gut gebrauchen.

Gruss Skyla
Skyla ist offline   Mit Zitat antworten
Alt 08-07-2003, 13:41   #12 (permalink)
unexplored MEDIA
 
Benutzerbild von theWEBster
 
Registriert seit: Aug 2001
Ort: 3xW
Beiträge: 139
schöne sache!!!
werd ich mir gleich mal zu gemüte ziehen
__________________
Öh, Signa ... Signawas? Tour? De France? Doping? Ich? Unerhört!!!
theWEBster ist offline   Mit Zitat antworten
Alt 17-07-2003, 23:38   #13 (permalink)
Gelegenheits-DAU
 
Benutzerbild von TOAOTC
 
Registriert seit: May 2003
Ort: Schwerin - come to where the Hecht beißt
Beiträge: 187
Talking OOP Newbie übt ein wenig

... sagt doch eigentlich schon alles, oder?

ActionScript:
  1. _global.EventBroadcaster = function(obj) {
  2.     this._listeners = new Array();
  3. }
  4.  
  5. EventBroadcaster.prototype._broadcastMessage = function() {
  6.     var eventName = arguments.shift();
  7.     for (i in this._listeners) {
  8.         this._listeners[i][eventName].apply(this._listeners[i], arguments);
  9.     }
  10. };
  11. EventBroadcaster.prototype._addListener = function(obj) {
  12.     this._removeListener(obj);
  13.     this._listeners.push(obj);
  14.     return (true);
  15. }
  16.  
  17. EventBroadcaster.prototype._removeListener = function(obj) {
  18.     for (i in this._listeners) {
  19.         if (this._listeners[i] == obj) {
  20.             this._listeners.splice(i, 1);
  21.             return (true);
  22.         }
  23.     }
  24.     return (false);
  25. }
  26.  
  27. Mouth = new EventBroadcaster();
  28. Ear = new Object();
  29. Ear.onSpeak = function() {
  30.     trace("I hear you");
  31. };
  32. Mouth._addListener(Ear);
  33. Mouth._broadcastMessage("onSpeak");

Kann mir jemand sagen, ob dieses Script genauso gut/besser/schlechter arbeitet und wo die Vorteile/Nachteile liegen?

*nachwissendürst* TOAOTC

Geändert von TOAOTC (17-07-2003 um 23:51 Uhr)
TOAOTC ist offline   Mit Zitat antworten
Alt 25-07-2003, 12:33   #14 (permalink)
rOb
Alter User
 
Registriert seit: Jun 2001
Ort: Bodensee-Metropole
Beiträge: 1.144
zu skylas beispiel

wieso saves cpu?

ActionScript:
  1. mc1_mc.onEnterFrame = mc1_mc.onMotor;
  2. mc1_mc.onMotor = function() {
  3.         this._x += 2;
  4. };
  5.  
  6. mc2_mc.onEnterFrame = mc2_mc.onMotor;
  7. mc2_mc.onMotor = function() {
  8.         this._x -= 2;
  9. };

die strukturellen vorteile sind klar, auch das somit objekte ohne zeitleiste einen enterframe bekommen können, aber wieso soll das in dem beispiel cpu sparen? ich sehs nicht.....

thx rob
rOb ist offline   Mit Zitat antworten
Alt 27-07-2003, 11:07   #15 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
vielleicht meinte er Speicher?
aber ob da jetzt ne funktion mehr oder weniger drinn steht?
tut sie das überhaupt?
Janoscharlipp 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:55 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele