Gibt es ein "on (positionChange)" ?

Jedimaster

Mitglied
Hallo Leute,

ich bin auch mal wieder mit einer Flash-Frage da.

Für ein kleines Spiel stelle ich in einer isometrischen Perspektive Spielobjekte dar. Wenn diese auf der virtuellen Oberfläche nach hinten, also vom Spieler weg bewegt werden, soll natürlich auch deren Größe angepasst werden, um den dreidimensionalen Effekt nachzuahmen.

Ich habe mir als Lösung folgendes ausgedacht: Wenn ich ein Spielobjekt mit startDrag anfange zu bewegen, ermittelt sich anhand der Position ._y des Objekts ein Größenfaktor. Wie der genau aussieht ist ja hier nicht so wichtig und nur ein mathematisches Detail. Anhand des Größenfaktors wird eine neue _height und _width des Objektes ermittelt und soll bei jeder Bewegung der Figur durch startDrag angepasst werden.

Aber genau hier ist das Problem, denn ich möchte diese Größenänderung nur durchführen, wenn ein Objekt bewegt wird! Wenn ich beispielsweise diese Groessenänderungsprozedur in startDrag einfüge, wird ja immer nur im Moment des ersten Klickens diese Größenanpassung durchgeführt. Setze ich es in onClipEvent (enterFrame) ändert sich das Objekt permament, d.h. es hört nicht mehr auf zu wachsen, bis es auf dem Bildschirm verschwunden ist.

Rein theoretisch bräuchte ich soetwas wie ein "on (positionChange)" oder "on (yChange)".

Hat jemand eine Idee, wie ich die Größenänderung nur bei Koordinatenänderung durchführen kann?

Viele Grüße,
JediMaster
 
Hi,

starte bei startDrag einfach eine onEnterFrame-Methode, die kontinuierlich die Koordinaten überprüft. Bei stopDrag kannst Du sie dann wieder löschen.

Alternativ (wenn es wirklich nur um Verschieben mit der Maus geht), kannst Du dafür auch einen temporären Mousehandler (onMouseMove) verwenden.

Gruß
.
 
Hallo Datic!

Vielen Dank für die rasche Hilfe.
Ich hab's versucht so wie in Deinem Tip umzusetzen, doch nach vielen Versuchen weiß ich nicht mehr weiter, da ich mich in Neuland befinde. Verstanden hab ich das ganze so wie folgt.

Im AS des MC lege ich irgendwo das hier an (wo genau weiß ich nicht):

Code:
	this.onStartDrag = function() {
		
		this.onEnterFrame = function() {

			this._height = this._y * 0.2; // ..bspw. so oder so ähnlich			

		}
		
	}

Fehler werden keine gemeldet, aber funktionieren ist auch nicht.. hab's nämlich getraced und daher weiß ich, dass die onStartDrag-Funktion nie aufgerufen wird!?

Wo liegt denn hier der Fehler?

Viele Grüße,
JediMaster
 
Hi,

nö, so:
PHP:
this.onPress = function() {
    this.startDrag();
    this.onEnterFrame = function() {
        this._height = this._y * 0.2;
    }
}

this.onRelease = this.onReleaseOutside = function() {
    this.stopDrag();
    delete this.onEnterFrame;
}
"onStartDrag" gibt es nicht. ;)

Gruß
.
 
Guten Morgen & muchas gracias!

Auf die Idee mit onStartDrag bin ich durch Codebeispiele auf anderen Sites gekommen..
..schon merkwürdig. :confused:

Aber mein Skript tut jetzt genau das was es soll!

Gruß & nochmals Danke,
JediMaster

PS: WOW! Um diese Uhrzeit so ein Service ;)
 
Hi,

na ja, ich bin noch etwas länger auf (Arbeit, weisst schon ....).

Natürlich kannst Du Dir onStartDrag als Funktion definieren; Du musst sie dann allerdings auch aufrufen:
PHP:
this.onStartDrag = function() {
    this.onEnterFrame = function() {
        this._width = this._y;
    }
}

this.onPress = function() {
    this.startDrag();
    this.onStartDrag();
}
Wäre aber bloß eine Kapselung der onEnterFrame-Methode.

Gruß
.
 
Zurück