ERLEDIGT
JA
JA
ANTWORTEN
2
2
ZUGRIFFE
268
268
EMPFEHLEN
-
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:
PHP-Code: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;
}
};
}
-
Hallo,
die onEnterFrames mit den Skalierungen dürften die Performance nicht matchentscheidend beeinträchtigen. Die Distanzberechnung hingegen könnte man vielleicht etwas eleganter lösen, indem du z.B. die effektive Formel erst dann anwendest, wenn die Maus in eine relevante Nähe des MovieClips kommt.
Ideal für solche Sachen sind gitterbasierte Positionsberechnungen, da auch sehr performancesparend. Das genialste Teil dafür ist in meinen Augen Grant Skinners ProximityManager-Klasse, am besten pröbelst du damit ein wenig rum.
An und für sich ist doch dein Skript aber in Ordnung. Gibts denn bei deiner *.swf Performance-Probleme?
gruss
-
Bisher gibt es noch keine Performanceprobleme, jedoch habe ich die Befürchtung, das sie später auftauchen werden.
Aber ich nehme mir erstmal den Link zu Herzen und werde da mal reinschauen, danke!
Ähnliche Themen
-
Effizienz Frage
Von Der Wolf im Forum C/C++Antworten: 5Letzter Beitrag: 29.08.10, 18:25 -
Frage zur Effizienz
Von kevkev im Forum Coders TalkAntworten: 5Letzter Beitrag: 24.04.06, 23:09 -
Formularverarbeitung Effizienz steigern
Von sirvival im Forum PHPAntworten: 2Letzter Beitrag: 28.02.06, 10:56 -
GGT Effizienz
Von Java/CppProgrammer im Forum Coders TalkAntworten: 3Letzter Beitrag: 05.02.05, 14:06 -
Ich mal wieder,habe mal wieder eine Frage...
Von Kuscheltier im Forum PhotoshopAntworten: 3Letzter Beitrag: 16.09.01, 19:24





Zitieren
Login





