15.4 Nützliche Erweiterungen
Es finden sich zahlreiche mehr oder weniger sinnvolle Erweiterungen für Movieclips. Die meisten davon bestehen nur aus wenigen Zeilen Code und erleichtern die Programmierung ungemein. Ganz nebenbei verbessert sich die Lesbarkeit und Wartbarkeit des Programmcodes.
15.4.1 Positionen auf der Bühne
Die absolute Position eines Elementes ist gerade bei sehr verschachtelten Movieclip-Konstruktionen nützlich, um Elemente zueinander auszurichten. Hierbei helfen die Methoden globalToLocal und localToGlobal nur bedingt, da deren Anwendung umständlich ist. Einfach anzuwendende Eigenschaften für die absolute horizontale und vertikale Position auf der Bühne stellt das folgende Skript zur Verfügung:
MovieClip.prototype.getX = function() {
position.fla
var point=new Object();
point.x=this._x;
point.y=this._y;
this._parent.localToGlobal(point);
return point.x;
};
MovieClip.prototype.setX = function(x) {
var point=new Object();
point.x=x;
point.y=this._yabs;
this._parent.globalToLocal(point);
this._x=point.x;
};
MovieClip.prototype.getY = function() {
var point=new Object();
point.x=this._x;
point.y=this._y;
this._parent.localToGlobal(point);
return point.y;
};
MovieClip.prototype.setY = function(y) {
var point=new Object();
point.x=this._xabs;
point.y=y;
this._parent.globalToLocal(point);
this._y=point.y;
};
MovieClip.prototype.addProperty("_xabs", MovieClip.prototype.getX, MovieClip.prototype.setX);
MovieClip.prototype.addProperty("_yabs", MovieClip.prototype.getY, MovieClip.prototype.setY);
// Teste die Eigenschaft
mcContainer.meineMovieClipInstanz._xabs=300;
trace(mcContainer.meineMovieClipInstanz._xabs);
trace(mcContainer.meineMovieClipInstanz._x);
Mit Hilfe der absoluten Koordinaten gelingt es jetzt auch, x- und y-Positionen zu wählen, die immer auf der Bühne liegen, so dass ein Element, sollte es einmal aus dem Bild laufen, automatisch wieder auf der anderen Seite erscheint:
MovieClip.prototype.getX = function() {
immer Im Bild.fla
var point = new Object();
point.x = this._x;
point.y = this._y;
this._parent.localToGlobal(point);
return point.x;
};
MovieClip.prototype.setX = function(x) {
var point = new Object();
if (x<0) {
point.x = Stage.width-(x%Stage.width);
} else {
point.x = x%Stage.width;
}
point.y = this._yabs;
this._parent.globalToLocal(point);
this._x = point.x;
};
MovieClip.prototype.getY = function() {
var point = new Object();
point.x = this._x;
point.y = this._y;
this._parent.localToGlobal(point);
return point.y;
};
MovieClip.prototype.setY = function(y) {
var point = new Object();
point.x = this._xabs;
if (y<0) {
point.y = Stage.height-(x%Stage.height);
} else {
point.y = y%Stage.height;
}
this._parent.globalToLocal(point);
this._y = point.y;
};
MovieClip.prototype.addProperty("_xabs", MovieClip.prototype.getX, MovieClip.prototype.setX);
MovieClip.prototype.addProperty("_yabs", MovieClip.prototype.getY, MovieClip.prototype.setY);
// Teste die Eigenschaft
_root.onEnterFrame = function() {
mcContainer.meineMovieClipInstanz._xabs -= 5;
mcContainer.meineMovieClipInstanz._yabs += 10;
};
15.4.2 Spiegeln
Das vertikale Spiegeln unterscheidet sich von der horizontalen Version nur durch die verwendete Achse, also ob Sie anstelle der Eigenschaft _xscale die Eigenschaft _yscale beeinflussen:
MovieClip.prototype.vflip = function() {
// Spiegele vertikal
this._yscale *= -1;
};
15.4.3 Bewegen
Bewegung ist auf vielfältige Art und Weise möglich. In vielen Fällen reicht zum Beispiel die Angabe der horizontalen und vertikalen Schrittweite aus:
MovieClip.prototype.move = function(xstep, ystep) {
this._x += xstep;
this._y += ystep;
};
Eine alternative Form der Bewegung berücksichtigt die Richtung und die Entfernung:
MovieClip.prototype.move = function(distance, angle) {
move.fla
// Wandle Grad in Bogenmaß
var rad = angle*Math.PI/180;
// Bewege Objekt
this._x += Math.cos(rad)*distance;
this._y += Math.sin(rad)*distance;
};
// Teste die Fähigkeit
_root.onMouseDown = function() {
meineMovieClipInstanz.move(5, 45);
};
|