Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 27-03-2006, 20:19   #1 (permalink)
completely mad
 
Registriert seit: Mar 2006
Beiträge: 160
Stufenlose rotation mit actionscript, abhängig vom timer

Hallo,

ich habe einen movieclip, der sich innerhalb einer bestimmten zeit um insgesamt 360° drehen soll. ich steh gerade aufm schlauch und hab keine ahnung, was ich am code ändern muss, damit die rotation stufenlos verläuft. wäre die zeit wie in dem beispiel 10 sek, dann würde das ja sehr ruckelig aussehen...

habt ihr ne idee?

movieclip >> "control"
cdown = countdownwert, anfangswert = 10 sekunden

Code:
stop();
_global.cdown = 10;
var i = int(_global.cdown);
var tl = this; // this >> _root.control
function countDown() {
	--i == -1 ? clearInterval(iv) : tl.zaehler.text=i;
	if ((i+1) > i){
		(control._rotation) += (360/((int(_global.cdown))+1));
	}
}
iv = setInterval(countDown, 1000);
tl.zaehler.text = i;
besten dank für schnelle antworten!

madtrigger
madtrigger ist offline   Mit Zitat antworten
Alt 27-03-2006, 20:26   #2 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 924
Wer hat denn diesen grauenhaften Code geschrieben. Hast du den irgendwo gefunden?
Wenn du eine Bewegung innerhalb einer bestimmten Zeit haben möchtest, musst du die Position von der Zeit abhängig machen. Die kannst du z.B. mit getTimer() -startzeit bestimmen.

mfg. h
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D
hazy fantazy ist offline   Mit Zitat antworten
Alt 27-03-2006, 21:04   #3 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
Also, den Code fine ich schon mal nicht so übel (auch wenn getTimer natürlich etwas genauer funktionieren dürfte), sinnvoll wäre es das Ding natürlich an die zu erwartenden framerate (in meinem Beispiel variable) anzupassen dann läuft es vermutlich am saubersten, auch wenn die Funktion im Grunde genommen unabhängig von der tatsächlichen Framerate gesichert ist (Du kannst also ruhig fps=40 lassen, auch wenn Du tatsächlich mit einer anderen Bildrate arbeitest, der Zeiger ist trotzdem nach 10 sec einmal rund):
ActionScript:
  1. stop();
  2. _global.cdown = 10;
  3. _global.fps=40;
  4. miliseconds=1000/fps;
  5. var i = _global.cdown*fps;
  6. tl = this; // this >> _root.control
  7. function countDown() {
  8.     --i <= 0 ? clearInterval(iv) : tl.zaehler.text=Math.floor(i/_global.fps);
  9.     if ((i+1) > i){
  10.         (control._rotation) = 360/_global.cdown*(_global.cdown-(i)/_global.fps);
  11.     }
  12. }
  13. iv = setInterval(countDown, miliseconds);
  14. tl.zaehler.text = i

Gruß

Alois

Edit: hm, die Abweichungen sind doch gravierender als ich dachte also doch besser mit getTimer:
ActionScript:
  1. stop();
  2. _global.cdown = 10;
  3. _global.fps = 40;
  4. miliseconds = 1000/fps;
  5. tl = this;
  6. // this >> _root.control
  7. function countDown() {
  8.     var t = (getTimer()-_global.starttime)/1000;
  9.     t>=_global.cdown ? clearInterval(iv) : tl.zaehler.text=Math.floor(t);
  10.     (control._rotation) = 360/_global.cdown*t;
  11. }
  12. _global.starttime = getTimer();
  13. iv = setInterval(countDown, miliseconds);
  14. tl.zaehler.text = cdown;
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-

Geändert von Alois (27-03-2006 um 21:31 Uhr)
Alois ist offline   Mit Zitat antworten
Alt 27-03-2006, 21:06   #4 (permalink)
completely mad
 
Registriert seit: Mar 2006
Beiträge: 160
Zitat:
Zitat von hazy fantazy
Wer hat denn diesen grauenhaften Code geschrieben. Hast du den irgendwo gefunden?
Wenn du eine Bewegung innerhalb einer bestimmten Zeit haben möchtest, musst du die Position von der Zeit abhängig machen. Die kannst du z.B. mit getTimer() -startzeit bestimmen.

mfg. h
Ich bastel momentan einen mp3player und möchte, dass sich das objekt abhängig von der länge der extern eingeladenen lieder einmal um 360° dreht ...

flash sagt über die timer funktion folgends:

Zitat:
Gibt die Anzahl der Millisekunden zurück, die seit dem Beginn der Wiedergabe der SWF-Datei vergangen sind.
ich will mich aber auf die länge der eingeladenen lieder beziehen ... geht das trotzdem damit?
madtrigger ist offline   Mit Zitat antworten
Alt 27-03-2006, 21:11   #5 (permalink)
completely mad
 
Registriert seit: Mar 2006
Beiträge: 160
@Alois: danke, das ist genau das was ich brauchte ...
madtrigger ist offline   Mit Zitat antworten
Alt 27-03-2006, 21:37   #6 (permalink)
Level up
 
Benutzerbild von Alois
 
Registriert seit: Jun 2001
Ort: Bocholt
Beiträge: 4.155
ich hoffe, Du hast mein 'EDIT' gelesen, setInterval ist nicht gerade genau und bei sowas besser nur als Handler zu benutzen.

Gruß

Alois
__________________
-Spuckt mir auf den Stuhl, ich will im Grünen sitzen-
Alois ist offline   Mit Zitat antworten
Alt 27-03-2006, 21:45   #7 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 924
Wie wäre es denn damit?
ActionScript:
  1. function startCountDown(cdown, fps, tl) {
  2.     var iv;
  3.     var miliseconds = 1000 / fps;
  4.     var starttime = getTimer();
  5.  
  6.     tl.zaehler.text = cdown;
  7.     iv = setInterval( function () {
  8.         var t = (getTimer() - starttime) / 1000;
  9.         if (t >= cdown) {
  10.             clearInterval(iv);
  11.             t = cdown;
  12.         }
  13.         tl.zaehler.text = Math.floor(t);
  14.         tl.control._rotation = 360 / cdown * t;
  15.     }, miliseconds);
  16. }
  17. stop();
  18. startCountDown(10, 40, this);

Der Unterschied ist der, dass du nicht hundert globale Variablen rumfliegen hast.
mfg. h
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D

Geändert von hazy fantazy (27-03-2006 um 22:05 Uhr)
hazy fantazy ist offline   Mit Zitat antworten
Alt 27-03-2006, 23:13   #8 (permalink)
completely mad
 
Registriert seit: Mar 2006
Beiträge: 160
danke für eure hilfe!

ich persönlich finde den code von alois verständlicher. abgesehen davon, spuckt mir flash bei der eingabe deines codes (hazy) ne fehlermeldung aus (er hätte ein komma bzw eine klammer erwartet) ... ich selbst sehe den syntaxfehler nicht...

aber so klappt das alles wunderbar, daher nochmal meinen besten dank an euch!
madtrigger ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 08:48 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele