Ich habe folgendes Script gebastelt, dieses Skaliert MovieClips Dynamisch, je nach Distanz vom MovieClip zum Mauszeiger, nur scheint mir das etwas zu Resourcenlastig.
Die Aktion wird aufgerufen, wenn sich die Maus bewegt - wenn der Mauszeiger nahe genug ist, wird eine onEnterFrame Methode aufgerufen, die angfängt das ganze Teil zu skalieren, ist es skaliert, wird die onEnterFrame Funktion beendet.
Die onEnterFrame Funktion ist deswegen noch drin, da es, wenn man es nur über die onMouseMove Funktion steuert, teilweise eher ruckelig aussieht.
Sooo...mir fällt spontan keine möglichkeit ein, das in irgendeiner Art und weiße Effizienter zu gestalten, und wenn man bedenkt, das diese Funktion öfter vorkommen wird (35-50x), dürfte das doch sehr lastig für den PC werden, wenn dann aufeinmal dutzende von onEnterFrames anfangen zu skalieren, und währenddessen noch dutzende onMouseMove Events ausgewertet werden...
Script:
Die Aktion wird aufgerufen, wenn sich die Maus bewegt - wenn der Mauszeiger nahe genug ist, wird eine onEnterFrame Methode aufgerufen, die angfängt das ganze Teil zu skalieren, ist es skaliert, wird die onEnterFrame Funktion beendet.
Die onEnterFrame Funktion ist deswegen noch drin, da es, wenn man es nur über die onMouseMove Funktion steuert, teilweise eher ruckelig aussieht.
Sooo...mir fällt spontan keine möglichkeit ein, das in irgendeiner Art und weiße Effizienter zu gestalten, und wenn man bedenkt, das diese Funktion öfter vorkommen wird (35-50x), dürfte das doch sehr lastig für den PC werden, wenn dann aufeinmal dutzende von onEnterFrames anfangen zu skalieren, und währenddessen noch dutzende onMouseMove Events ausgewertet werden...
Script:
PHP:
MovieClip.prototype.setAction = function()
{
var maxDist:Number = 60; // Maximaler Mausabstand, um Scaling auszulösen
var mult:Number = 2.3; // Scaling multiplikator
var dist:Number = Math.sqrt(Math.pow(Math.abs(_xmouse), 2) + Math.pow(Math.abs(_ymouse), 2)); // Errechnen der Distanz zu Clip);
var newScale:Number; // neue Scalinggröße
var enterActive:Boolean = false;
this.onMouseMove = function()
{
dist = Math.sqrt(Math.pow(Math.abs(this._xmouse), 2) + Math.pow(Math.abs(this._ymouse), 2));
if (dist <= maxDist) // Wenn Distanz zu MC kleiner als Maximale Distant, löse onEnterFrame aus
{
enterActive = true;
this.onEnterFrame = function()
{
newScale = 100 + (maxDist * mult * 0.5 - dist * mult); // Errechnen der neuen Scalings
this._xscale += (newScale - this._xscale) / 5; // Fading zum neuen Scaling
if (this._xscale <= 100) // Sollte Skalierung kleiner als 100% sein, setze sie zurück auf 100%
{
this._xscale = 100;
}
this._yscale = this._xscale; // Passe yScale and xScale an
if (this._xscale >= newScale + 1 && this._x <= newScale - 1) // Wenn (fast) newScale erreicht ist...
{
this._xscale = newScale; //...setze exakten newScale Skalierungswerte
this._yscale = this._xscale;
enterActive = false;
delete this.onEnterFrame; // Beenden der onEnterFrame Funktion
}
};
}
else
{
if(enterActive == true) {
delete this.onEnterFrame;
enterActive = false;
}
this._xscale = 100;
this._yscale = 100;
}
};
}