Animation verbessern

emonem

Erfahrenes Mitglied
Hi,

ich baue ein Menü welche eine rotierende Stern Animation im Hintergrund laufen hat.Aber igendwie läuft das Ding ziemlich stockend. Weiß jetzt nicht ob das an meinem Skript (hab mit der setInterval Methode gearbeitet) oder an der Grafik liegt (ai Datei in Flash importiert) ? Veränderung der Intervallzeit bewirkt irgendwie nichts. Würde es mit onEnterFrame flüssiger laufen oder muß ich den Stern in Flash erstellen? Wäre für jeden Tip dankbar damit die Animation etwas flüssiger läuft.

AS:
PHP:
setInterval(moveStar, 10);
function moveStar() {
	if (_root._xmouse>=220 && _root._xmouse<=430) {
		_root.star_mc._rotation += 1;
		updateAfterEvent();
	} else if (_root._xmouse>=10 && _root._xmouse<220) {
		_root.star_mc._rotation += 2;
		updateAfterEvent();
	} else {
		stop();
	}
}

-link-

Gruß
emonem
 
Hi,

ich würde nicht unbedingt sagen, dass es stockt; durch die sehr spitzen Zacken mit Rahmen flimmert es durch die Glättung halt ein wenig.

Probier mal, die Form zu teilen und den Rahmen zu entfernen (nur mit der gelben Füllung läufts schon flüssiger). Dann könntest Du die Form auf eine neue Ebene kopieren, die untere mit der Option "Modifizieren - Form - Füllung erweitern" um einen Pixel "verdicken" und in schwarz umwandeln.

Gruß
.
 
Hi,

danke für die Hilfe.
Ich habe bei meiner Animation jetzt ein anderes Problem und zwar dreht sich der Stern in die Richtung in der der Mauszeiger grad in dem Film positioniert ist. Das klappt auch.
Wenn ich nun den Mauszeiger sehr schnell aus dem Film ziehe dreht sich der Stern trotzdem weiter. Hab das setInterval im meinem AS auf 1 gestellt, aber das hilft nicht.
Muß ich das Problem mit der hitTest methode lösen oder geht das irgendwie anders?
Der Film soll stoppen sobald ich den Zeiger aus der Datei ziehe.

Mein AS:
PHP:
setInterval(moveStar,1);
function moveStar() {
	if (_root._xmouse>=220 && _root._xmouse<=430) {
		_root.star_mc._rotation += 1;
		updateAfterEvent();
	} else if (_root._xmouse>=10 && _root._xmouse<220) {
		_root.star_mc._rotation += 2;
		updateAfterEvent();
	} else {
		stop();
	}
}

Hab´s mal in eine html gepackt -link-
 
Hi,

Ja, entweder Du arbeitest mit hitTest (und fragst einen unsichtbaren Clip in Bühnengröße ab), oder mit Mausereignissen (onRollOver etc.). Im letzteren Fall verdeckt Dein "Hit"-MC allerdings entweder andere Mausereignisse oder wird von anderen Objekten verdeckt. hitTest wäre also m.E. hier das Mittel der Wahl.

Gruß
.
 
Hi,

so ich nochmal. Hab in meinem Film jetzt zwei unsichtbare mc´s angelegt. Einen auf der rechten und den anderen auf der linken Seite. Je nachdem auf welcher Seite man mit dem Zeiger in dem Film ist dreht sich der Stern in die entsprechende Richtung.
Die Mc´s werden per hitTest Methode angesprochen

PHP:
setInterval(moveStar, 10);
function moveStar() {
	if (right_mc.hitTest(_root._xmouse, _root._ymouse)) {
		_root.star_mc._rotation += 1;
		clearInterval();
	} else if (left_mc.hitTest(_root._xmouse, _root._ymouse)) {
		_root.star_mc._rotation -= 1;
		clearInterval();
	} else {
		stop();
	}
}
Nun so weit klappt das mal wieder aber wenn ich nun den Mauszeiger aus dem Bereich ziehe dreht sich der Stern trotzdem weiter. Das dürfte doch gar nicht passieren weil der Zeiger doch aus dem Film ist und die Methode doch gar nicht angesprochen werden dürfte. Liegts vielleicht an meinem Skript? Es hilft auch nichts wenn ich das setInterval verkürze- :( Jemand eine Idee?
Hier nochmal die neue swf im html Dokument. -link-
Hier die fla -link-

Gruß
 
Hi,

arbeite lieber mit rollOver/rollOut - wenn Du die Maus schnell aus dem Bühnenbereich ziehst, gilt weiterhin die letzte aktuelle Mausposition (mein Fehler: daran hatte ich nicht gedacht).

Dein "clearInterval()" macht übrigens überhaupt keinen Sinn: mit dieser Methode kannst Du nur Intervalle löschen, deren Interval-ID Du Dir gemerkt hast, indem Du sie clearInterval als Parameter übergibst. Das Intervall willst Du zudem überhaupt nicht löschen, sonst würde Deine Animation aufhören und sich nicht wieder starten lassen.

Das "stop" im else-Block mach ebenfalls keinen Sinn, da ja keine Zeitleiste abgespielt wird.

Mein Vorschlag:
Code:
var rotspeed = 0;

left_mc.onRollOver = function() {
	rotspeed = -1;
}

left_mc.onRollOut = left_mc.onDragOut = function() {
	rotspeed = 0;
}

right_mc.onRollOver = function() {
	rotspeed = 1;
}

right_mc.onRollOut = right_mc.onDragOut = function() {
	rotspeed = 0;
}

this.onEnterFrame = function() {
	_root.star_mc._rotation += rotspeed;
}
Ein Intervall von 10 Millisekunden ist sowieso viel zu kurz um bei dieser Animation "in time" angezeigt zu werden - willst Du es flüssiger, erhöhe lieber die Framerate ein wenig.

Gruß
.
 
Hi,

mit dem rollOver ereigniss hätte ich dann das Problem das es darunterliegende Ereignisse im Film verdecken wird. Damit könnte ich aber noch leben und mir eine lösung ausdenken.

Gibts denn aber eine möglicheit das ich diese Flash Hand beim rollOver nicht angezeigt bekomme sondern den normalen Mauszeiger? Oder muß den normalen Zeiger nachbauen und diesen dann mithilfe von startDrag aufrufen? Das wäre nicht so toll.
 
Zurück