Zurück   Flashforum > Flash > ActionScript > ActionScript 2

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 02-12-2011, 01:11   #1 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.040
scope in As2, Eventmethode

nabend, bloß mal so aus Neugier:

Ich hatte gerade diesen thread gelesen:
Position von dynamischen Buttons in root

Es geht um eine Art tooltip, also ein Objekt reagiert auf Mouseevents anderer Objekte.

In As3 gedanklich beheimatet, wurde ich daran erinnert, das in As2 der scope in einer Eventmethode auf das jeweilige Objekt wechselt.

Wie greift man denn aus so einer Funktion auf die Klasse in der die Funktion definiert wurde (bzw. auf deren Eigenschaften) zu?

//Bleistift:
PHP-Code:
import flash.geom.Rectangle;
import flash.geom.Point;

class 
RectCursor
{
    private var 
FRAME:Number 5;
    
    private var 
_c:MovieClip;
    private var 
_currRect:Rectangle;
    
    public function 
RectCursor (cursor:MovieClip)
    {
        
_c cursor;
        
        
_currRect null;
    }
    
    public function 
addMc(mc:MovieClip):Void
    
{
        
mc.onRollOver over;
        
mc.onRollOut out;
    }
    
    private function 
over():Void
    
{
        
trace(_c); //undefined     =(
        
        
_currRect addFrame(bounds2Rect(MovieClip(this).getBounds(_c._parent)), FRAME);
        
        
draw();
    }
    
    private function 
out():Void
    
{
        
_currRect null;
        
        
draw();
    }
    
    private function 
bounds2Rect(obj:Object):Rectangle
    
{
        return new 
Rectangle(obj.xMinobj.yMinobj.xMax obj.xMinobj.yMax obj.yMin);
    }
    
    private function 
addFrame(rect:Rectangleframe:Number):Rectangle
    
{
        
rect.-= frame;
        
rect.-= frame;
        
rect.width += 2*frame;
        
rect.height += 2*frame;
        
        return 
rect;
    }
    
    private function 
draw():Void
    
{
        
_c.clear();
        
        if (!
_currRect) return;
        
        
_c.lineStyle(10);
        
_c.moveTo(_currRect.left_currRect.top);
        
_c.lineTo(_currRect.right_currRect.top);
        
_c.lineTo(_currRect.right_currRect.bottom);
        
_c.lineTo(_currRect.left_currRect.bottom);
        
_c.lineTo(_currRect.left_currRect.top);
        
    }

Ich kann in der "over" Funktion nicht auf die Klasseneigenschaft "_c" zugreifen, da sich der scope ändert. =(

Ich bin über den AsBroadcaster gestolpert, der wohl so eine Art EventDispatcher wrapper darstellt.
PHP-Code:
    public function addMc(mc:MovieClip):Void
    
{
        
AsBroadcaster.initialize(mc);
        
mc.addListener(this);
        
mc.onRollOver = function () {this.broadcastMessage("over"this)};
        
mc.onRollOut = function () {this.broadcastMessage("out")};
    }
    
    private function 
over(target:MovieClip):Void
    
{
        
        
trace (_c); // defined =)
        
        
        
_currRect addFrame(bounds2Rect(target.getBounds(_c._parent)), FRAME);
        
        
draw();
    } 
So funktioniert's.

Macht man das so in As2?
Ich habe noch nie etwas von dem Broadcaster gehört, das Problem sollte ja aber öfter auftreten, oder?

PS: fand das eher OT und hab deshalb nen neuen thread aufgemacht.
Angehängte Dateien
Dateityp: swf Unbenannt-1.swf (962 Bytes, 1x aufgerufen)
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick

Geändert von milchreis (02-12-2011 um 01:18 Uhr)
milchreis ist offline   Mit Zitat antworten
Alt 02-12-2011, 07:23   #2 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.867
Mike Chambers hat wohl was ähnliches gebaut, unter mx.utils.Delegate
und davon hab ich schon paarmal gehört

ich für meinen Teil würd das über ne closure lösen:
PHP-Code:
public function addMc(mc:MovieClip):Void
{
    var 
__this this;
    
mc.onRollOver = function () { __this.over(mc); };
    
mc.onRollOut = function () { __this.out(mc); };
}

mit oder ohne dem mc als Parameterje nachdem was ich benötige 
oder nach dem 3. mal wo ich sowas bauen muss, würde ich etwas bauen, dass ich ähnlich händeln kann wie das Event-system in As3.
auch mit dem Hintergrund, dass in AS2 immer nur ein Event-Listener /Objekt und Event hinzugefügt werden kann, und alte einfach überschrieben werden.
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist gerade online   Mit Zitat antworten
Alt 02-12-2011, 07:43   #3 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.040
Aha.
Die lokalen Variablen der Funktion in der die Funktion definiert wurde, sind also in beiden Funktionen verfügbar.

hier auch was ähnliches von keith:

Scope in AS2 Classes revisited, again. | BIT-101
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist offline   Mit Zitat antworten
Alt 02-12-2011, 08:06   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.139
Ja, wenn du meine alten AS2 Beispiele anschaust, sieht das genauso aus.

Das Scoping ist aus JavaScript übernommen. Die Methoden nutzen Method Closures, um den Kontext, in dem Sie definiert wurden zu persistieren.
Omega Psi ist offline   Mit Zitat antworten
Alt 02-12-2011, 09:21   #5 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.040
Zitat:
Zitat von Omega Psi Beitrag anzeigen
zu persistieren.
Das hast du aber schön gesagt

Da bin ich ja froh, das dieses drollige Konzept überwunden wurde.
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist offline   Mit Zitat antworten
Alt 02-12-2011, 09:54   #6 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.139
War das .. Ironie?
Omega Psi ist offline   Mit Zitat antworten
Alt 02-12-2011, 10:21   #7 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.139
Btw.: das Konzept wurde nicht verworfen und wird auch in anderen Programmiersprachen verwendet. Das ist sollte man als Programmierer verstanden haben.
Omega Psi ist offline   Mit Zitat antworten
Alt 02-12-2011, 12:59   #8 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von milchreis Beitrag anzeigen
Da bin ich ja froh, das dieses drollige Konzept überwunden wurde.
Das sagst Du ausgerechnet jetzt, wo wir Adobe-sei-dank alle wieder mit JS rumwursteln sollen?!
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!

Geändert von Martin Kraft (02-12-2011 um 14:14 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 02-12-2011, 14:05   #9 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.040
Zitat:
Zitat von Omega Psi Beitrag anzeigen
War das .. Ironie?
Nein. Schön zwischen methods, closures, scope, events etc. auch mal einen deutschen Ausdruck zu finden.

Zitat:
Zitat von Omega Psi Beitrag anzeigen
Btw.: das Konzept wurde nicht verworfen und wird auch in anderen Programmiersprachen verwendet. Das ist sollte man als Programmierer verstanden haben.
Nicht generell verworfen. Aber in diesem Anwendungsfall finde ich es angenehmer, einen Listener anhängen zu können.
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick
milchreis 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
scope Problem: Delegate Klasse / scope:this funzt nich! twietee ActionScript 2 4 18-07-2010 14:45
Klasseneigenschaften in Eventmethode ansprechen jacquesr ActionScript 2 2 13-10-2008 22:05
Mal was zum scope? Chlorwasser Softwarearchitektur und Entwurfsmuster 3 17-03-2004 10:40
xmk scope / AS 2.0 thurner Flash mit XML und Webservices 3 05-10-2003 05:38
Scope von this cip22 Softwarearchitektur und Entwurfsmuster 8 09-09-2003 12:36


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

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


Copyright ©1999 – 2012 Marc Thiele