|
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 |
|
|
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' |
|
|
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 |
|
|
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' |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
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:
|
|
|
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:
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:1 | var 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 | |
|
|
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 |
|
|
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:1 | this._parent.stopp=false;
|
und auf dem Pausebutton
ActionScript:1 | this._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 |
|
|
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:
|
|
|
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 |
|