Flashhilfe.de - Flash Community

Animation beschleunigen/verlangsamen mit einem Schieberegler [Flash CS3]

 


AntwortenRegistrieren Seite1  

Homer23#1
Benutzerbild von Homer23
Beiträge: 7
Registriert: Apr 2008

02.02.2010, 21:12

Hallo Zusammen,

bin gerade dabei mich mit Flash auseinander zu stetzen und stoße schnell an meine Grenzen. Ich hab eine Animation mittels einem MovieClip erstellt. Diesen würde ich jetzt gerne mit Hilfe eines "Schiebereglers" steuern.

Kurz gesagt gibt es die Möglichkeit, die Geschwindigkeit von der Animationen unabhängig von der Bildrate steuern.

Für HILFE wäre ich euch sehr dankbar.

Viele Grüße
Sleepingbeast#2
Benutzerbild von Sleepingbeast
Beiträge: 579
Wohnort: Halle
Registriert: Apr 2005

02.02.2010, 22:05

Hallo Homer,

hast du deine Animation in der Zeitleiste erstellt? Dann ist die Animationsgeschwindigkeit tatsächlich nur über eine Änderung der Bildrate beeinflussbar (oder nur über Umwege). Deshalb empfehle ich dir die Nutzung von Tweening-Klassen und da insbesondere die Caurina-Tweener-Klasse. Du kannst sie dir unter http://code.google.com/p/tweener/ runterladen. Dort findest du auch eine Dokumentation. Auch hier im Forum findest du jede Menge Informationen über Caurina. Kann ich wirklich empfehlen!


Patrick
_________________________________________________________
Um Rekursion wirklich zu verstehen, muss man zuerst Rekursion verstehen.
null != 'null' != 0 != '0'
Homer23#3
Benutzerbild von Homer23
Beiträge: 7
Registriert: Apr 2008

Themenautor/in

02.02.2010, 22:22

Hallo Patrick,

vielen Dank für deine Antwort.

Die Animation hab ich über einen (verschatelten) MovieClip erstellt.
Diesen dann auf der Bühne platziert und diesen will ich jetzt mit Hilfe eines Reglers beschleunigen oder verlangsamen.
....




Viele Grüße
Sleepingbeast#4
Benutzerbild von Sleepingbeast
Beiträge: 579
Wohnort: Halle
Registriert: Apr 2005

02.02.2010, 23:50

Wie geschrieben, schau dir mal Caurina an. Du sparst dir damit nen Reisen-Haufen Arbeit und jede Menge Frust.


Patrick
_________________________________________________________
Um Rekursion wirklich zu verstehen, muss man zuerst Rekursion verstehen.
null != 'null' != 0 != '0'
itac#5
Benutzerbild von itac
Beiträge: 95
Registriert: Jan 2008

05.02.2010, 01:55

Eine Möglichkeit:

-den Film am Anfang zu stoppen
-ein setInterval machen
-in der setIntervall-Funktion ein Frame weitergehen (mc.gotoAndStop(mc._currentframe+1))

Die setIntervall kannst Du mit verschiedenen Werten starten und so den Movieclip langsamer oder schneller machen.
Hab das so bei meiner Affenfaust gemacht.

das Problem wird die Verschachtelung von Movieclips sein, eine Zeitleiste kann man so gut steuern, aber verschachtelte...

salü
--
http://www.a-d-k.de
Homer23#6
Benutzerbild von Homer23
Beiträge: 7
Registriert: Apr 2008

Themenautor/in

08.02.2010, 20:03

Hallo,

vielen Dank für deine Antwort. Genau sowas versuch ich schon die ganze Zeit hinzu bekommen. Kannst du mir bitte das mit dem "setInterval" erklären. Ich glaube das mein "Problem" damit gelöst werden kann. Bin leider ein Flash-Neuling.
Mein Wissen mit Action-Script geht leider gegen NULL.

Für eine Antwort von dir wäre ich (mehr) als dankbar :)

Viele Grüße
itac#7
Benutzerbild von itac
Beiträge: 95
Registriert: Jan 2008

08.02.2010, 22:34

Guck Dir den Befehl "setInterval" in der Hilfe an, da ist ein Beispiel.

Probiere mal den oben genannten Ansatz und poste Deinen Code, dann guck ich nochmal.

Aufgabe:
-definiere in der Hauptzeitleiste eine Variabel
-gebe der Variabel den Wert 40 (=25fps)
-erstelle eine Funktion für das Intervall
-erstelle einen Regler für die Geschwindigkeitsänderung
-alternativ geht auch ein Button +/- ja nach Wunsch

Du kannst ja auch die fla posten, als Beispiel reicht ein MC-Tween in die Hauptzeitleiste (dann wird die Datei nicht zu groß).
--
http://www.a-d-k.de
Homer23#8
Benutzerbild von Homer23
Beiträge: 7
Registriert: Apr 2008

Themenautor/in

09.02.2010, 12:34

Danke erst einmal für deine Antwort und Hilfsbereitschaft. Vielen Dank.

So, hab mal probiert (angefangen) das umzusetzen was du geschrieben hast. Habs leider nicht hin bekommen, logisch versteh ich den ablauf, kannst leider nicht mit meinen Kenntnissen in ActionScript nicht ausddrücken.

Ich poste dir mal einen letzten Stand. Der Aufbau der fla-Datei ist nur Schemahaft dargestellt. Der Feinschlief kommt wenn alles funktioniert.

Viele Grüße

Angehängte Dateien:
Adobe Flash Quelldatei schema1.fla61.50 KB
itac#9
Benutzerbild von itac
Beiträge: 95
Registriert: Jan 2008

09.02.2010, 19:30

OK, da hast ja schon mal das Grundgerüst.

Als erstes entferne das play() und stop() in auf den Buttons, das wird hier anders gelöst.
Nun gibt den Movieclip1 einen Instanznamen z.B. mc1. Eben so auch den slider. Sonst kann man das nicht per Script ansprechen.

Mache im ersten Frame von mc1 ein stop().

Wenn Du jetzt den Film startest sollte nur die blaue Fläche stehen bleiben.

Jetzt gehe in die Hauptzeitleiste und mache aus der Variabel bildrate eine Zahl:
ActionScript:
1var bildrate=40;

Mit einem String kann man nicht rechnen.

Nun benötigt Du eine weitere Variabel in der die IntervallID gespeichert werden kann, das ist wichtig um später das Intervall neu zu starten wenn eine andere bildrate eingestellt wird.
Z.B.:
ActionScript:
1var intervallID=setInterval(Intervall,bildrate);;


An der Stelle wird nicht nur die Variabel intervallID definiert sondern auch gleich das Intervall gestartet.

Nun muss die Intervallfunktion ausgearbeitet werden:

ActionScript:
1
2
3
4
5
function Intervall () {
   var pos=_root.mc1._currentframe+1;//holte die aktuelle Frameposition
   if(pos==_root.mc1._totalframes){pos=1};//
   _root.mc1.gotoAndStop(pos);   
}


Wenn Du jetzt den Film testet sollten die Farbflächen durchlaufen.
Wenn Du bei bildrate eine andere Zahl eingibst entsprechend schneller oder langsamer.

Aufgabe: mache den Slider beweglich, nutze dazu onPress + startDrag und onRelease + stopDrag (Beispiele findest Du in der Flashhilfe)

poste wieder Deinen Stand, wenn alles funktioniert geht es weiter.
--
http://www.a-d-k.de
Geändert von itac am 09.02.10 um 19:33 Uhr
Homer23#10
Benutzerbild von Homer23
Beiträge: 7
Registriert: Apr 2008

Themenautor/in

10.02.2010, 21:22

Hallo itac,

so, das script mit der Bildrate hat alles super funktionert.
Den Slider bekomme ich leider nicht zum "bewegen". Problem, wie definiere ich den Anfangspunkt und den Endpunkt des Reglers,  bin am verzweifeln ...

... den letzten stand der Datei hab ich mit gepostet.

Viele Grüße
itac#11
Benutzerbild von itac
Beiträge: 95
Registriert: Jan 2008

11.02.2010, 19:56

Den Slider kannst Du mit folgenden Script in der Hauptzeitleiste belegen:
ActionScript:
1
2
3
4
5
6
this.mc1.slider.holder.onPress=function(){
   this.startDrag(false,-24,0,-24,200);//x=-24 y von 0 bis 200
   }
this.mc1.slider.holder.onRelease=function(){
   this.stopDrag();
   }


die Koordinaten bekommst Du raus in dem Du den Slider nach oben schiebst und dann bei den Eigenschaften guckst was bei x und y steht. Ebenso nach unten Schieben und auch die Werte eintragen.

Ich poste mal den kompletten Code der Hauptzeitleiste:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
var bildrate =500; //WArtezeit zwischen den Frames in Millisekunden

var sliderYmin=0;  //Slider oben
var sliderYmax=200;//Slider unten

var stopp=false; //wenn true dann spielt der Film nicht

var intervallID=setInterval(Intervall,bildrate);//Intervall starten


function Intervall () {
   var pos=_root.mc1._currentframe+1;    //aktuelle Position im Film +1
   if(pos==_root.mc1._totalframes){pos=1};//Überlauf, wnn am ende wieder von vorne anfangen
   
   if(!stopp)_root.mc1.gotoAndStop(pos); //wenn nicht stopp dann gehe zum Bild pos   
   
   var lastbildrate=bildrate;//alte Rate merken
   //neue Rate ausrechen
   /*
     10=minimale Wartezeit zwische zwei Frames in Millisekunden
     400=Maximale Wartezeit zuwischen zwei Frames in Millisekunden
     Der Rest ist ne simple Liniargleichung,
     mit negiert eingangswert (sliderYmax-_root.mc1.slider.holder._y)
     Das Ergebnis muss man runden (Math.round)
   */

   bildrate=10+Math.round(400/(sliderYmax-sliderYmin)*(sliderYmax-_root.mc1.slider.holder._y));
   
   //wenn die gemerke und die neu errrechneten Wartezeiten nicht die gleichen sind
   if(bildrate!=lastbildrate){
      clearInterval(intervallID);//Intervall löschen
      intervallID=setInterval(Intervall,bildrate);//und mit neuem Wert starten
      }   
}


this.mc1.slider.holder.onPress=function(){
   this.startDrag(false,-24,sliderYmin,-24,sliderYmax);
   }
   
this.mc1.slider.holder.onRelease=function(){
   this.stopDrag();
   }


Dazu auf dem Playbutton:
ActionScript:
1this._parent.stopp=false;


und auf dem Pausebutton
ActionScript:
1this._parent.stopp=true;


Wichtig: Wenn Du den Film mal anders aufbaust achte auf die richtige Referenzierung der einzelnen Movieclips (Slider, Film,...)

Wenn man möchte kann man das auch so erweitern das der Film rückwärts läuft.

Viel Spaß beim Ausprobieren.
--
http://www.a-d-k.de
Homer23#12
Benutzerbild von Homer23
Beiträge: 7
Registriert: Apr 2008

Themenautor/in

22.02.2010, 21:59

Hallo itac,

Vielen Dank!!! Funktioniert SUPER. Danke Danke Danke :).
Das einzigste wo der Compiler noch einen Fehler ausgibt sind die Steuerungstasten "STOP" and "Play". Der Fehler lautet "Anweisung muss innerhalb einer on-Prozedur vorliegen.

Hast du evtl. eine Idee an was das liegen kann. Ich poste dir mal den letzten Stand mit deinen Script.

Viele Grüße

Homer23

Angehängte Dateien:
Adobe Flash Quelldatei schema1_v1.fla67.00 KB
Adobe Flash Quelldatei schema1_v1.fla67.00 KB
itac#13
Benutzerbild von itac
Beiträge: 95
Registriert: Jan 2008

23.02.2010, 19:00

Hallo,

ja Du hast Die Scripte irgendwo noch im Film rumliegen.
Du musst halt ein Buttonscript mit ner on-Procedure erzeugen:

1.doppelklick auf die Fehlermeldung
2.beide Scripte nach diesem Schema erweitern:
ActionScript:
1
2
3
on(release){
this._parent.stopp=true;
}


salü
--
http://www.a-d-k.de

AntwortenRegistrieren Seite1  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Javascript new line [Flash CS5] 23.11.2020 - user01234
Partner Webseiten: art-and-law.de  Mediengestalter.info   phpwelt.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Impressum
© 1999-2022 Sebastian Wichmann - Flashhilfe.de