Thursday, July 29th 2010, 1:41pm UTC+2

You are not logged in.

  • Login
  • Register

public

Moderator

Posts: 546

Location: Dessau

1

Friday, March 23rd 2007, 2:03am

[OOP] bsp für selbstgebauten Broadcaster

vllt brauchts jemand ...
class:

ActionScript-Quelltext

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
34
35
36
37
38
39
40
41
42
43
44
45
46
class djpublic.utils.Broadcaster {
    private static var bc:Broadcaster;
    /**
    *    init (obj:Object):Void 
    */
    public static function init (obj:Object):Void {
        if (bc == undefined) {
            bc = new Broadcaster ();
        }
        obj._listeners = [];
        obj.addListener bc._addListener;
        obj.removeListener bc._removeListener;
        obj.broadcastMessage bc._broadcastMessage;
    }
    /**
    *    _addListener (obj:Object):Boolean
    */
    private function _addListener (obj:Object):Boolean {
        this._removeListener (obj);
        this["_listeners"].push (obj);
        return true;
    }
    /**
    *    _removeListener (obj:Object):Boolean
    */
    private function _removeListener (obj:Object):Boolean {
        var list:Array = this["_listeners"];
        for (var i:Number 0< list.lengthi++) {
            if (list[i] == obj) {
                list.splice (i1);
                return true;
            }
        }
        return false;
    }
    /**
    *    _broadcastMessage (evt:String):Void
    */
    private function _broadcastMessage (evt:String):Void {
        var args:Array = arguments.slice (1);
        var list:Array = this["_listeners"];
        for (var i:Number 0< list.lengthi++) {
            list[i][evt].apply (list[i], args);
        }
    }
}



bsp fla (sehr simple)

ActionScript-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import djpublic.utils.Broadcaster;
var c:Object = {};
var name:String "public";
Broadcaster.init (c);
c.addListener (this);
onEnterFrame = function ():Void {
    c.broadcastMessage ("enterFrame"name);
};
enterFrame = function (n):Void {
    trace (n);
};
onMouseDown = function ():Void {
    c.removeListener (this);
};
Gänsefleisch ma ihr´n Hund online!?

Inder nett...
  • Go to the top of the page

emperor

Intermediate

Posts: 474

Location: Biel, CH

2

Friday, March 23rd 2007, 7:31am

hey public

warum schreibst du da selbst einer?

unter mx.events findest du die von Adobe.

Ich sehe schon, sieh funktionieren nicht genau gleich, aber bei mir haben sie bis jetzt immer gereicht :). Also, wenn ich das core.UIObject auch dazu zähl.

gruss lukas
Der Kunde ist König und ich bin der Kaiser.
  • Go to the top of the page

3

Friday, March 23rd 2007, 11:13am

@public eine Membervariable auf undefined setzen ist unnötig. Da ihr Wert sowieso NULL ist solange sie nicht initialisiert wurde. Aber ansonsten hübsches Ding. ;) :)

@emperor Lies mal den Titel dieses Threads und dann sag mir warum Public nicht das Brotkasten Objekt von Adobe verwendet hat. 8)
Greetz Andi

Mod Dewey

CREAKTIF - Comes soon

Google ist dein Freund :D
  • Go to the top of the page

public

Moderator

Posts: 546

Location: Dessau

4

Friday, March 23rd 2007, 11:54am

@Dewey
hast natürlich recht....werds gleich ändern

@emperor
hab n ooch nur geschrieben als bsp fürn selbstgebauten und als anregung zb wenn man weis wie er funzt haben es andere vllt leichter sich son ding vllt in javascript zu shreiben denn soweit ik weis gibst da keinen (kann mich aber auch irren)
Gänsefleisch ma ihr´n Hund online!?

Inder nett...
  • Go to the top of the page

emperor

Intermediate

Posts: 474

Location: Biel, CH

5

Friday, March 23rd 2007, 12:14pm

jup, habe es gesehen. dachte nur ich mache darauf aufmerksam, da man ja die classen von adobe anschauen kann.

gruss lukas
Der Kunde ist König und ich bin der Kaiser.
  • Go to the top of the page

public

Moderator

Posts: 546

Location: Dessau

6

Friday, March 23rd 2007, 12:23pm

kann man eben nicht denn der AsBrodcaster is ne intinsict class....und was du meinst ist der EventDispatcher der eigentlich mal für die komponenten gedacht war....man muss aber ausserdem net immer den code so übelst aufblähen so wie es adobe gerne mal macht...siehe nur die componenten der v2
Gänsefleisch ma ihr´n Hund online!?

Inder nett...
  • Go to the top of the page

public

Moderator

Posts: 546

Location: Dessau

7

Friday, March 23rd 2007, 2:38pm

hier ma noch ne andere variante macht genau das selbe blos die syntax is n bissle anders durch das in der klasse deklarierete Array _listeners
somit erfolgt der zugriff in den privaten methoden nicht mehr this["_listeners"] sondern this._listeners

ActionScript-Quelltext

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
34
35
36
37
38
39
40
41
42
43
44
45
class djpublic.utils.Broadcaster {
    private static var bc:Broadcaster;
    private var _listeners:Array;
    /**
    *    init (obj:Object):Void 
    */
    public static function init (obj:Object):Void {
        if (bc == undefined) {
            bc = new Broadcaster ();
        }
        obj._listeners = [];
        obj.addListener bc._addListener;
        obj.removeListener bc._removeListener;
        obj.broadcastMessage bc._broadcastMessage;
    }
    /**
    *    _addListener (obj:Object):Boolean
    */
    private function _addListener (obj:Object):Boolean {
        this._removeListener (obj);
        this._listeners.push (obj);
        return true;
    }
    /**
    *    _removeListener (obj:Object):Boolean
    */
    private function _removeListener (obj:Object):Boolean {
        for (var i:Number 0this._listeners.lengthi++) {
            if (this._listeners[i] == obj) {
                this._listeners.splice (i1);
                return true;
            }
        }
        return false;
    }
    /**
    *    _broadcastMessage (evt:String):Void
    */
    private function _broadcastMessage (evt:String):Void {
        var args:Array = arguments.slice (1);
        for (var i:Number 0this._listeners.lengthi++) {
            this._listeners[i][evt].apply (this._listeners[i], args);
        }
    }
}
Gänsefleisch ma ihr´n Hund online!?

Inder nett...
  • Go to the top of the page