Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-01-2004, 10:38   #1 (permalink)
oEF(etischist)
 
Registriert seit: Dec 2003
Ort: muc
Beiträge: 664
Verständisproblem mit "prototype"

Hallo,

habe folgende Funktion, die ein Movieclip bei on enterFrame ständig aufruft.

ActionScript:
  1. onClipEvent (enterFrame) {
  2. _parent.berechneEntfernung(this._name, _parent._xmouse, _parent._ymouse);
  3. }
  4.  
  5. function berechneEntfernung(clip, x, y) {
  6.     // berechne die entfernung
  7.     a = this[clip]._x-x;
  8.     b = this[clip]._y-y;
  9.     entfernung = Math.sqrt((a*a)+(b*b));
  10.     trace(clip+":"+entfernung);
  11. }

Ergebnis: für jeden MC, der die Function aufruft kommt, richtiger weise, eine andere entfernung zur Mausposition.

Alternativ habe ich folgendes versucht:
ActionScript:
  1. onClipEvent (enterFrame) {
  2. berechneEntfernung(this._name, _parent._xmouse, _parent._ymouse);
  3. }
  4.  
  5. movieclip.prototype.berechneEntfernung = function(clip,x,y) {
  6.     // berechne die entfernung
  7.     a = this[clip]._x-x;
  8.     b = this[clip]._y-y;
  9.     entfernung = Math.sqrt((a*a)+(b*b));
  10.     trace(clip+":"+entfernung);
  11. }
Ergebnis: jeder MC hat die gleiche entfernung zur Maus. Oder verstehe ich prototype nicht richtig?

Die "berechneEntfernung"-Funktion liegt in einem MC, in dem die MCs liegen, die diese Funktion aufrufen.

Warum liefern beide Versuche unterschiedliche Ergebnisse?

Danke!
solo
soloFlash ist offline   Mit Zitat antworten
Alt 18-01-2004, 10:46   #2 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
Probier mal so:
ActionScript:
  1. MovieClip.prototype.berechneEntfernung = function() {
  2.         // berechne die entfernung
  3.         var a = this._x-this._parent._xmouse;
  4.         var b = this._y-this._parent._ymouse;
  5.         var entfernung = Math.sqrt((a*a)+(b*b));
  6.         trace(this._name+" :"+entfernung);
  7. }
Theoretisch könntest sogar den enterFrame auch noch mit in die prototype-Methode packen...
__________________
RTFM
Wie man Fragen richtig stellt.

Achim Bindannmalweg

Money makes the world go round, fear makes it turn much faster.
(New Model Army)

Geändert von sonar (18-01-2004 um 10:48 Uhr)
sonar ist gerade online   Mit Zitat antworten
Alt 18-01-2004, 10:57   #3 (permalink)
Flash & TYPO3
 
Registriert seit: Oct 2003
Ort: Bayern
Beiträge: 2.700
@sonar
Aber mit dieser Parameterübergabe müsste es doch genauso gehen, oder?
johanness ist offline   Mit Zitat antworten
Alt 18-01-2004, 11:10   #4 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
Ja gehen tuts schon - is ja kein Muss, mein Ansatz. Nur - eine Referenz auf einen MC mit zu übergeben, is unnötig, da ja eine Methode für die Klasse MovieClip generiert wird. Und wenn eh immer der Abstand zur Maus berechnet werden soll, kann man das ja auch gleich mit reinnehmen.
__________________
RTFM
Wie man Fragen richtig stellt.

Achim Bindannmalweg

Money makes the world go round, fear makes it turn much faster.
(New Model Army)
sonar ist gerade online   Mit Zitat antworten
Alt 18-01-2004, 13:56   #5 (permalink)
oEF(etischist)
 
Registriert seit: Dec 2003
Ort: muc
Beiträge: 664
Hallo,

Danke, hat funktioniert.
Und, ich denke ich hab's verstanden

aber: wieso muss ich this._parent._xmouse verwenden?
_parent._xmouse klappt nicht, dachte, das sei das gleiche?
bin etwas verwirrt.

Grüße,
solo

Geändert von soloFlash (18-01-2004 um 13:59 Uhr)
soloFlash ist offline   Mit Zitat antworten
Alt 18-01-2004, 14:01   #6 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
dein prototype ist falsch solo:
ActionScript:
  1. movieclip.prototype.berechneEntfernung = function(clip,x,y) {
  2.         // berechne die entfernung
  3.         a = this[clip]._x-x;
  4.         b = this[clip]._y-y;
  5.         entfernung = Math.sqrt((a*a)+(b*b));
  6.         trace(clip+":"+entfernung);
  7. }
in clip hinterlegste den namen von deinem mc
und willst dann in DIESEM mc den mc nochmal selbst suchen, er ist aber ne zeitleiste tiefer vorhanden
dein script würde durch diese änderung auch funktionieren
a = this[clip]._x-x;
ändern in
a = this._parent[clip]._x-x;
analaog dazu das b

bei dir wurden nur die mauskoordinaten ausgegeben denn
this[clip]._x lieferte jeweils ein undefined
in der rechnung wurde das undefined zur 0 konvertiert
deine werte entsprachen daher:
a=-x
b=-y

und sonar hat sich ja schon drüber ausgelassen wie unnötig und unflexibel deine ansteuerung is

deluxe
@solo das this bruachste seit mx
da du den onEnterFrame event als funktion zuweisst und nicht direkt auf den mc
sind gewisse gültigkeitsregeln der variablen

Geändert von Deluxe (18-01-2004 um 14:03 Uhr)
Deluxe ist offline   Mit Zitat antworten
Alt 18-01-2004, 15:31   #7 (permalink)
oEF(etischist)
 
Registriert seit: Dec 2003
Ort: muc
Beiträge: 664
@deluxe: ja, ich denke, ich habs mittlerweile kapiert (wird sich beim nächsten Versuch ja rausstellen )

also, ist dann das in deinem und Sonars Sinne?
ActionScript:
  1. MovieClip.prototype.berechneEntfernung = function() {
  2.     // berechne die entfernung
  3.     this.onEnterFrame = function() {
  4.         var a = this._x-this._parent._xmouse;
  5.         var b = this._y-this._parent._ymouse;
  6.         var entfernung = Math.sqrt((a*a)+(b*b));
  7. trace(clip+":"+entfernung);
  8.     };
  9. };

und deluxe, was meintest du mit
Zitat:
sind gewisse gültigkeitsregeln der variablen
?
grüße,
solo
soloFlash ist offline   Mit Zitat antworten
Alt 18-01-2004, 19:54   #8 (permalink)
Neuer User
 
Registriert seit: Jun 2001
Ort: Stuttgart
Beiträge: 6.415
hmm schon besser wobei ich den onEnterFrame weggelassen hätte und später erst gesagt hätte

ActionScript:
  1. deinfilm.onEnterFrame=function(){
  2. this.deinPrototype()
  3. }

damit biste wesentlich flexibler denn so kannst du mehr funktionen in einen enterframe event des mcs packen
im anderen fall würden die sich immer überschreiben.

gültigkeitsregeln, in dem zusammenhang fällt immer das wort
"scoping" damit kannst du aber nicht viel anfangen denke ich.
also hab ichs mal in reiner deutscher sprache versucht

bsp.: ne variable im root ist im mc xyz der im root liegt nicht "gültig"
du musst erst den pfad zum root angeben und hast dann damit zugriff auf diese variable
genauso ist es mit dem this und parent

du musst mit dem this erst sagen "hey ich meine genau DEINE zeitleiste und keine andere"
du verweist also auf die zeitleiste und kannst nun von da aus auf die _parent eigenchaft zugreifen oder auf andere eigenshcaften wie _xmouse etc

bisschen kompakt gehalten aber soltle doch schon helfen

deluxe
Deluxe ist offline   Mit Zitat antworten
Alt 19-01-2004, 07:39   #9 (permalink)
oEF(etischist)
 
Registriert seit: Dec 2003
Ort: muc
Beiträge: 664
"scoping" sagt mir tatsächlich nichts, Gültigkeitsbereiche sehr wohl.

dennoch, ist mir eins noch nciht ganz klar:
der unterschied zwischen this._parent und _parent.

this ist das objekt selbst.
_parent das übergeordnete
this._parent auch das übergeordnete?

mein Problem funktioniert nur mit this._parent, und ich weiss, dass ich ne ebene höher muss, aber dachte immer mit _parent würde ich das erreichen.

Danke für Eure schnelle Hilfe und Eure Erklärungen,
solo
soloFlash ist offline   Mit Zitat antworten
Alt 19-01-2004, 09:11   #10 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
Es kann eigentlich nie schaden, mit "this" einen Zeiger auf das aktuelle Objekt zu setzen, seit MX gehört das auch "zum guten Ton". In der Definition einer prototype-Methode musst du wohl mit "this" arbeiten, weil es ja zu dem Zeitpunkt noch kein konkretes Objekt gibt, auf welches sich Eigenschaften wie _x, _y oder auch _parent beziehen (die Flash z.B. in einem onClipEvent-Handler automatisch zuordnen kann).

...und "scoping" und Gültigkeitsbereiche meint das selbe
__________________
RTFM
Wie man Fragen richtig stellt.

Achim Bindannmalweg

Money makes the world go round, fear makes it turn much faster.
(New Model Army)
sonar ist gerade online   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 14:31 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele