Zurück   Flashforum > Flash > ActionScript > ActionScript 2

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 28-09-2011, 15:40   #1 (permalink)
Webverwickler
 
Benutzerbild von wanst
 
Registriert seit: May 2005
Beiträge: 327
watch und _x

Ich hab grad einen großen Hänger mit der watch-Funktion.

Kann es sein, dass man vorgegebene Eigenschaften nicht »watchen« kann, also ein mein_mc.watch("_x", callback); nicht funktioniert?

Wie mach ich das dann – mit einem eigenen Listener?
__________________
Gruß
Wanst

Reden ist Silber, Schweigen ist Gold! ... Meistens

Geändert von wanst (28-09-2011 um 15:42 Uhr)
wanst ist offline   Mit Zitat antworten
Alt 28-09-2011, 15:49   #2 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.040
http://livedocs.adobe.com/flash/9.0_...tml/wwhelp.htm


Zitat:
Vordefinierte ActionScript-Eigenschaften wie _x, _y, _width und _height sind im Allgemeinen Get-/Set-Eigenschaften und können nicht mit Object.watch() überwacht werden.
Was willst du denn damit machen?

Eventuell: eigene Klasse schreiben, _x setter überschreiben.
__________________
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 28-09-2011, 15:51   #3 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von wanst Beitrag anzeigen
Ich hab grad einen großen Hänger mit der watch-Funktion.
Interessant, da arbeitet man Jahre lang mit AS und kennt diese Funktion nicht...
Zitat:
Zitat von wanst Beitrag anzeigen
Kann es sein, dass man vorgegebene Eigenschaften nicht »watchen« kann, also ein mein_mc.watch("_x", callback); nicht funktioniert?
Laut Referenz lässt sich diese Funktion nicht auf Eigenschaften anwenden, die mit get/set-Methoden implementiert werden:
Zitat:
Zitat von ActionScript 2.0-Referenzhandbuch
Vordefinierte ActionScript-Eigenschaften wie _x, _y, _width und _height sind im Allgemeinen Get-/Set-Eigenschaften und können nicht mit Object.watch() überwacht werden.
Zitat:
Zitat von wanst Beitrag anzeigen
Wie mach ich das dann – mit einem eigenen Listener?
Da das mit der Vererbung und dem Überschreiben von get/set-Methoden in AS2 ja eher halbgar ist, wird es wohl am einfachsten sein, wenn Du Dir einfach ein onEnterFrame bastelst, das diese Variable überprüft.

Edit: Wurde gerade von einem milchreis überrundet
__________________
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 (28-09-2011 um 15:54 Uhr)
Martin Kraft ist offline   Mit Zitat antworten
Alt 28-09-2011, 16:07   #4 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.867
oder du implementierst eine eigene Eigenschaft, mit eigenen getter/setter:
PHP-Code:
function getX() { return this._x; }
function 
setX(value:Number){
  
this._x value;
  
trace("_x changed");
}
this.addProperty("x"getXsetX); 
oder so:
PHP-Code:
var x:Number this._x;
var 
y:Number this._y;
var 
rotation:Number this._rotation;
var 
scaleX:Number this._xscale;
var 
scaleY:Number this._yscale;
function 
setProp(propoldValnewValuserData){
  
this[userData] = newVal;
  
trace(prop+" changed");
}
this.watch("x"setProp"_x");
this.watch("y"setProp"_y");
this.watch("rotation"setProp"_rotation");
this.watch("scaleX"setProp"_xscale");
this.watch("scaleY"setProp"_yscale"); 
__________________
greetz Thomas

plz RTFM & Coding Conventions

Geändert von thomas_E (28-09-2011 um 16:15 Uhr)
thomas_E ist gerade online   Mit Zitat antworten
Alt 28-09-2011, 17:50   #5 (permalink)
Webverwickler
 
Benutzerbild von wanst
 
Registriert seit: May 2005
Beiträge: 327
Super!

Meine Fresse, seid ihr schnell, Jungs

Vielen Dank schon mal.

@milchreis: ich hab ein Textfeld. Abhängig davon, ob der Text, den ich da rein lade, in das Feld passt oder nicht, werden Scrollpfeile rechts daneben nachgeladen mit Abstand dx zum rechten Rand vom Textfeld.
Es kann nun sein, dass ist die Breite vom Textfeld ändern muss. Dann hätte ich gern, dass sich die Scrollpfeile mit verschieben. So was ähnliches habe ich noch mit einem MC unter dem Textfeld vor, das sich je nach unten verschiebt (mit textHeight).
Ach so: mit Klassen hab ichs noch nicht so, lass mich aber gern belehren.

@Martin Kraft: onEnterFrame wollte ich wegen der Performance vermeiden, aber mir wird wohl nichts anderes übrig bleiben. Das bringt mich zur nächsten Frage: macht watch eigentlich aus Performance-Sicht was anderes als onEnterFrame?

@thomas_E: Hab beides probiert, hat beides nicht geklappt. Vielleicht mach ich was falsch. Ich meine aber, das kann so nicht gehen.

Zum Verständnis:
watch soll doch ein Eigenschaft überwachen und etwas machen, wenn sie sich ändert. Bei deinen beiden Vorschlägen ändert sich doch der Wert der »Ersatzvariablen« x nicht, oder? Die würde sich ja erst ändern, wenn setX aufgerufen wird. Also passiert auch nichts, wenn man die überwacht.
Richtig?
__________________
Gruß
Wanst

Reden ist Silber, Schweigen ist Gold! ... Meistens

Geändert von wanst (28-09-2011 um 17:54 Uhr)
wanst ist offline   Mit Zitat antworten
Alt 28-09-2011, 21:23   #6 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.867
der Gedanke dahinter war mc.x, mc.y, etc zu verwenden statt mc._x && mc._y, etc.

über watch und setProp solltest du dann abfangen können, wernn sich der Wert ändert (setter halt) und der Wert wird dann an _x,... weitergegeben, damit auch die Position drehung usw. stimmt.

aber vor allen dingen: musst du dann konsequent mit mc.x arbeiten, und nicht zwischendurch mit _x, weil diese dann nicht mehr synchron sind.

(naja, bei der Variante mit addProperty sollte das synchron bleiben, da diese Funktionen einfach den Wert weiterleiten, dafür musst du für jeden Parameter eine eigene Funktion implementieren.)

aber dass war auch nur ein schnellschuss anhand der Doku dieser Funktion. ich hab es nicht so mit AS2.

Zitat:
ich hab ein Textfeld. Abhängig davon, ob der Text, den ich da rein lade, in das Feld passt oder nicht, werden Scrollpfeile rechts daneben nachgeladen mit Abstand dx zum rechten Rand vom Textfeld.
Es kann nun sein, dass ist die Breite vom Textfeld ändern muss. Dann hätte ich gern, dass sich die Scrollpfeile mit verschieben. So was ähnliches habe ich noch mit einem MC unter dem Textfeld vor, das sich je nach unten verschiebt (mit textHeight).
Ach so: mit Klassen hab ichs noch nicht so, lass mich aber gern belehren.
ich glaub, an der Stelle machst du es dir zu kompliziert. bau dir eine Komponente. MF+TF +ScrollPfeile, und dem MC gibst du eine Funktion setText(text:String), die den Text ins TextFeld schreibt, und sich um die ScrollPfeile kümmert (anzeigen, verstecken, etc.)
und dadurch, dass TF && Pfeile in einem gemeinsamen MC drinstecken, kannst du sie auch zusammen verschieben.

alternativ müsstest du auch hier über addProperty eine Eigenschaft "text" anlegen können, die den Text direkt an das TextFeld weiterleitet, aber wie gesagt; ich bin nicht so ein Freund von AS2, und daher auch nicht so firm drin.
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist gerade online   Mit Zitat antworten
Alt 28-09-2011, 22:23   #7 (permalink)
Webverwickler
 
Benutzerbild von wanst
 
Registriert seit: May 2005
Beiträge: 327
ein halbes Aaah!

Nachdem ich doch etwas ins Grübeln gekommen bin, hat mir das geholfen:
Zitat:
Zitat von thomas_E Beitrag anzeigen
der Gedanke dahinter war mc.x, mc.y, etc zu verwenden statt mc._x && mc._y, etc.
[...]
aber vor allen dingen: musst du dann konsequent mit mc.x arbeiten, und nicht zwischendurch mit _x, weil diese dann nicht mehr synchron sind.
So wirds klarer.

Nun gut, nach etwas Hilfe-Lektüre zu addProperty, verstehe ich auch, was du mit deinen beiden Beispielen gemeint hast. Damit werde ich fürs Erste (und heute Abend) mal anfangen.

Jetzt wird mir auch der Weg über die eigene Klasse klarer, was milchreis vorgeschlagen hat. Nur bräuchte ich dazu etwas noch Hilfe...

Zitat:
Zitat von thomas_E Beitrag anzeigen
ich glaub, an der Stelle machst du es dir zu kompliziert. bau dir eine Komponente. MF+TF +ScrollPfeile, und dem MC gibst du eine Funktion setText(text:String), die den Text ins TextFeld schreibt, und sich um die ScrollPfeile kümmert (anzeigen, verstecken, etc.)
und dadurch, dass TF && Pfeile in einem gemeinsamen MC drinstecken, kannst du sie auch zusammen verschieben.

alternativ müsstest du auch hier über addProperty eine Eigenschaft "text" anlegen können, die den Text direkt an das TextFeld weiterleitet, aber wie gesagt; ich bin nicht so ein Freund von AS2, und daher auch nicht so firm drin.
Zum Verschieben wäre das auch OK, aber ich will die Textfeld-Breite ändern, und da sollen die Pfeile dran bleiben. Ich brauche also nach wie vor einen Beobachter z.B. für _width vom Textfeld. Da ist es egal, ob die als einzelne MCs rumliegen oder in einer Komponente gebündelt sind.

Mir fällt gerade auf, dass ich am Anfang nur von _x gesprochen habe. Sorry! Ich hatte mir auf die Schnelle einen Test gebastelt, in dem ich nur mit Überwachen von _x rumprobiert hab, ob das überhaupt funktioniert. Aber es ist inzwischen glaub ich klar, dass ich vom Textfeld _width und _height bzw. textHeight überwachen will.
__________________
Gruß
Wanst

Reden ist Silber, Schweigen ist Gold! ... Meistens

Geändert von wanst (28-09-2011 um 22:24 Uhr)
wanst ist offline   Mit Zitat antworten
Alt 29-09-2011, 04:27   #8 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.867
Zitat:
Ich brauche also nach wie vor einen Beobachter z.B. für _width vom Textfeld.
nochmal:

Zitat:
Zitat von ActionScript 2.0-Referenzhandbuch
Vordefinierte ActionScript-Eigenschaften wie _x, _y, _width und _height sind im Allgemeinen Get-/Set-Eigenschaften und können nicht mit Object.watch() überwacht werden.
oder anders ausgedrückt: IS NICH DRIN!
das einzige wie du _x, _width, etc direkt überwachen kannst ist per EnterFrame.

Zitat:
Mir fällt gerade auf, dass ich am Anfang nur von _x gesprochen habe. Sorry!
was nicht wirklich schlimm ist, ist eh alles der selbe Pott.

also nochmal: erstell einen MC, pack da alles rein, und schreib dann folgenden Code da rein:
PHP-Code:
function tfGetWidth():Number { return tf._width; }
function 
tfSetWidth(val:Number):Void {
    
tf._width val;
    
trace("textField._width changed");
}
this.addProperty("textWidth"tfGetWidthtfSetWidth);
 
function 
tfGetHeight():Number { return tf._height; }
function 
tfSetHeight(val:Number):Void {
    
tf._height val;
    
trace("textField._height changed");
}
this.addProperty("textHeight"tfGetHeighttfSetHeight);

function 
getText():String { return tf.text; }
function 
setText(val:String):Void {
    
tf.text val;
    
trace("textField.text changed");
}
this.addProperty("text"getTextsetText); 
nun musst du noch das TextFeld (im MovieClip) "tf" nennen, oder den Code an deinen Instanznamen anpassen.

und wenn du jetzt bei diesem MC mc._x = 10; setzt bewegt sich der ganze klumpatsch mit, ebenso bei _rotation, _xscale, _yscale und _y.
und wenn du mc.textWidth = 100; machst wird auch brav die breite des TextFeldes verändert, und ein entsprechender Trace rausgeschmissen (wie oben programmiert), und so weiter, und so fort.
das selbe gilt auch für textHeight, und mit mc.text kannst du auch den Text setzen, so dass flash das mitbekommt, und dir das brav mitteilt.

Und wenn du da auch noch ScrollPfeile reinbringen willst, ... na mal schauen, was _dir_ dazu einfällt.
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist gerade online   Mit Zitat antworten
Alt 29-09-2011, 09:41   #9 (permalink)
Webverwickler
 
Benutzerbild von wanst
 
Registriert seit: May 2005
Beiträge: 327
Lightbulb gelöst – vielen Dank für all die Hilfe!

Zitat:
Zitat von thomas_E Beitrag anzeigen
oder anders ausgedrückt: IS NICH DRIN!
das einzige wie du _x, _width, etc direkt überwachen kannst ist per EnterFrame.
hab ich schon verstanden, über den von dir beschriebenen Weg indirekt beobachten funktioniert ja auch. Wie gesagt, ich hab die Nacht da noch dran weiter gewerkelt. Ich hab das ganz ähnlich gemacht wie du vorgeschlagen hast.
Zitat:
Zitat von thomas_E Beitrag anzeigen
Und wenn du da auch noch ScrollPfeile reinbringen willst, ... na mal schauen, was _dir_ dazu einfällt.
Schon kapiert – Danke noch mal!
__________________
Gruß
Wanst

Reden ist Silber, Schweigen ist Gold! ... Meistens
wanst 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
Frage zu watch gaspode Flash 8 2 17-02-2007 16:57
watch im NetStream? derbrueller ActionScript 2 2 23-11-2006 17:24
watch auf array YellowSky Flash MX 2004 3 23-10-2004 02:13
MX: Wheelmouse per watch(); michael Softwarearchitektur und Entwurfsmuster 26 29-06-2004 19:16
watch() & setInterval() Cynthia ActionScript 1 2 10-03-2004 11:41


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

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


Copyright ©1999 – 2012 Marc Thiele