functionschaos für timer und schleife zum rückwärts spielen [Flash 10]
| Beiträge: 24 Registriert: Sep 2009
| 21.10.2010, 02:50
hi.... ich sitze mal wieder vor meinem script, welches ich von AS2 zu AS3 konvertieren möchte......
Der Teil bis zur Kommentarlinie läuft fehlerfrei. Ich möchte aber die jeweils vorherigen filme rückwärts laufen lassen, das funktionierte aich, sie sind genau einen frame zurückgesprungen, deswegen wollte ich einen timer nutzen und die if abfrage so oft zu wiederholen, bis die filme am anfang sind.
Ich hab rausgefunden, dass ich ein problem damit habe, funktionen korrect zu schreiben, ich weiß einfach nicht, was in die klammer muss und warum und wie ich ddamit die parameter übergeben kann.
vielleicht ist die lösung ja recht einfach, aber ich komm einfach net dahinter.....
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
var delay:uint = 20;
var repeat:uint = 0;
var delayTimer:Timer = new Timer(delay, repeat);
var END_var = "ersterstart";
var BUTTONS_ary:Array = ["projekte","leistungen","profil","gaestebuch","kontakt"];
if (END_var == "ersterstart") {
projekte_mc.gotoAndPlay(2);
projekte_button_mc.gotoAndPlay("active");
END_var = "projekte";
}
for (var buttonID:Object in BUTTONS_ary){
this[BUTTONS_ary[buttonID] + "_button_mc"].ID = buttonID;
this[BUTTONS_ary[buttonID] + "_button_mc"].addEventListener(MouseEvent.MOUSE_OVER, rollover_func);
this[BUTTONS_ary[buttonID] + "_button_mc"].addEventListener(MouseEvent.MOUSE_OUT, rollout_func);
this[BUTTONS_ary[buttonID] + "_button_mc"].addEventListener(MouseEvent.CLICK, release_func);
}
function rollover_func(e:MouseEvent):void { // Funktion obRollOver
var MC_var = BUTTONS_ary[e.currentTarget.ID];
if ( END_var != MC_var) { // Prüft ob der zu Startende MC nicht bereits läuft, wenn nicht
this[MC_var + "_button_mc"].gotoAndPlay("over"); // startet RollOver Effect
}
}
function rollout_func(e:MouseEvent):void { // Funktion obRollOut
var MC_var = BUTTONS_ary[e.currentTarget.ID];
if ( END_var != MC_var) { // Prüft ob der zu Startende MC nicht bereits läuft, wenn nicht
this[MC_var + "_button_mc"].gotoAndPlay("out"); // startet RollOut Effect
}
}
function release_func(e:MouseEvent):void{
var MC_var = BUTTONS_ary[e.currentTarget.ID];
if ( END_var != MC_var) {
this[MC_var + "_button_mc"].gotoAndPlay("active"); // Button zum Hauptfilm startet ohne Probleme
this[MC_var + "_mc"].gotoAndPlay(2); // Hauptfilm startet ohne Probleme
//////////////////////////////////////////////////////////////////////////////////////////////////////
reverse_func(e);
//END_var = MC_var; // END_var ist der Film der als nächstes Beendet wird, weil der vorher lief
} // MC_var ist ein hilfskonstukt um mithilfe der ID einen vernünftigen MC namen zu erhalten
// MC_var ist der Film, der grade gestartet wird, wenn man den Button drück.
}
function reverse_func(e:Event):void {
trace (END_var);
delayTimer.addEventListener(TimerEvent.TIMER, timer_func_formc);
//delayTimer.start();
/* wenn ich den timer starten will kommt diese Meldung:
Error #1069: Eigenschaft name für flash.utils.Timer nicht gefunden und es ist kein Standardwert vorhanden.
at main_fla::MainTimeline/timer_func_formc()
at flash.utils::Timer/_timerDispatch()
at flash.utils::Timer/tick()*/
}
function timer_func_formc( e:TimerEvent):void {
trace ("timer_func_formc " + e.target.name);
trace (END_var);
/*
// damit soll der button vom vorherigen Hauptfilm beendet werden (ist noch nicht fertig, da ich es nicht tracen kann)
if (this[END_var + "_button_mc"].currentFrame > 1) {
this[END_var + "_button_mc"].prevFrame();
trace (this[END_var + "_button_mc"].currentFrame);
}
// damit soll der vorherige Hauptfilm beendet werden (ist noch nicht fertig, da ich es nicht tracen kann)
if (this[END_var + "_mc"].currentFrame > 1) {
this[END_var + "_mc"].prevFrame();
trace (currentFrame);
}
*/
}
|
Zuvor habe ich an einem anderen script gearbeitet, welches ähnlich ist, dabei habe ich gemerkt, das mir eine schleife zu schnell zurückspult und einen timer eingebaut, funktioniet tadellos, allerdings bin ich unfähig dieses in mein anderes script zu übertragen....:
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 | import flash.utils.Timer;
import flash.events.TimerEvent;
var delay:uint = 20;
var repeat:uint = 0;
//var count:uint=0;
var delayTimer:Timer = new Timer( delay, repeat);
illus_mc.illus_back_but.addEventListener(MouseEvent.CLICK, main_mcReverse_func);
aktuelles_mc.aktuelles_back_but.addEventListener(MouseEvent.CLICK, main_mcReverse_func);
fotos_mc.fotos_back_but.addEventListener(MouseEvent.CLICK, main_mcReverse_func);
genaehtes_mc.genaehtes_back_but.addEventListener(MouseEvent.CLICK, main_mcReverse_func);
var main_mc_str;
function main_mcReverse_func(e:Event):void {
delayTimer.addEventListener( TimerEvent.TIMER, timer_func);
delayTimer.start();
main_mc_str = e.target.name.split("_back_but").join("");
this[main_mc_str + "_mc"].gotoAndPlay("fadeout");
}
function timer_func( e:TimerEvent):void {
if (currentFrameLabel != main_mc_str) {
prevFrame();
trace (currentFrame);
} else {
delayTimer.stop();
gotoAndStop("stop");
main_zoom_mc[main_mc_str + "_button_mc"].gotoAndPlay("out");
trace (currentFrame);
}
}*/
|
| | | Beiträge: 24 Registriert: Sep 2009
Themenautor/in
| 21.10.2010, 15:02
Ok, ich hab den Übeltäter, hatte eine komische trace funktion geschrieben, nun gehts fast......
also der timer läuft, wenn man langsam vorgeht und die buttons nicht zu schnell hintereinander drückt.... wenn doch, dann gibts ein chaos, aus nur halb zurück gespulten Mcs.... ich denke das liegt daran, dass ich nur einen timer benutze,...... ich wollte für jeden button einen timer erzeugen, aber ich weiß nicht wie ich die variabe deklarieren soll....
der code bis hierhin sieht so aus.....
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
var delay:uint = 20;
var repeat:uint = 0;
var delayTimer:Timer = new Timer(delay, repeat);
var reverseMc_str;
var prevMc_str = "firstStart"; // prev_var der Mc, der aktiv ist und beendet werden soll
var BUTTONS_ary:Array = ["projekte","leistungen","profil","gaestebuch","kontakt"]; // Die Buttons und MainMcs
// prev_var wird hier verwendet um den ersten Film zu laden
if (prevMc_str == "firstStart") {
projekte_mc.gotoAndPlay(2);
projekte_button_mc.gotoAndPlay("reversed");
prevMc_str = "projekte"; // Projekte läuft, also wird es als nächstes beendet
reverseMc_str = "projekte";
}
// Buttons bekommen EventListener
for (var buttonID:Object in BUTTONS_ary){
this[BUTTONS_ary[buttonID] + "_button_mc"].ID = buttonID; // erstellt IDs
this[BUTTONS_ary[buttonID] + "_button_mc"].addEventListener(MouseEvent.MOUSE_OVER, rollover_func);
this[BUTTONS_ary[buttonID] + "_button_mc"].addEventListener(MouseEvent.MOUSE_OUT, rollout_func);
this[BUTTONS_ary[buttonID] + "_button_mc"].addEventListener(MouseEvent.CLICK, release_func);
}
function rollover_func(e:MouseEvent):void { // Funktion RollOver
var activeMc_str = BUTTONS_ary[e.currentTarget.ID]; // activeMc_str sagt welcher MC nun aktive ist
if ( prevMc_str != activeMc_str) { // Prüft ob der activeMc nicht der zu beendendeMc ist
this[activeMc_str + "_button_mc"].gotoAndPlay("over"); // startet RollOver Effect
}
}
function rollout_func(e:MouseEvent):void { // Funktion RollOut
var activeMc_str = BUTTONS_ary[e.currentTarget.ID]; // activeMc_str sagt welcher MC nun aktive ist
if ( prevMc_str != activeMc_str) { // Prüft ob der zu Startende MC nicht bereits läuft, wenn nicht
this[activeMc_str + "_button_mc"].gotoAndPlay("out"); // startet RollOut Effect
}
}
function release_func(e:MouseEvent):void { // Funktion ButtonAktive und start mainMcs
var activeMc_str = BUTTONS_ary[e.currentTarget.ID]; // activeMc_str sagt welcher MC nun aktive ist
if ( prevMc_str != activeMc_str) { // Prüft ob der zu Startende MC nicht bereits läuft, wenn nicht
this[activeMc_str + "_button_mc"].gotoAndPlay("active"); // ButtonAktive startet
this[activeMc_str + "_mc"].gotoAndPlay(2); // MainMc startet
delayTimer.start(); // Timer startet
delayTimer.addEventListener(TimerEvent.TIMER, timer_func_formc);
reverseMc_str = prevMc_str; // setzt den vorherigen Mc auf zurückspulen
prevMc_str = activeMc_str; // setzt den nun activen Mc auf prevMc, dammit dieser als nächstes beendet wird
}
}
// bezieht auf prevMc_str
function timer_func_formc( e:TimerEvent):void {
var buttonMc_reverseComplete_boo = false; // buttonMc nicht zurückgespult
var mainMc_reverseComplete_boo = false; // mainMc nicht zurückgespult
if ( buttonMc_reverseComplete_boo == true && mainMc_reverseComplete_boo == true) {
delayTimer.stop(); // stopt den loop dieser Funktion, wenn beide zurückgespult sind.
} else {
if (this[reverseMc_str + "_button_mc"].currentFrameLabel != "reversed") { // Wenn currentFrameLabel nicht active, dann weiter zurück
this[reverseMc_str + "_button_mc"].prevFrame();
trace (this[reverseMc_str + "_button_mc"].currentFrame);
} else {
buttonMc_reverseComplete_boo = true; // Wenn zurückgespult, dann true
}
if (this[reverseMc_str + "_mc"].currentFrame > 1) { // Wenn currentFrame größer als 1, dann weiter zurück
this[reverseMc_str + "_mc"].prevFrame();
trace (currentFrame);
} else {
mainMc_reverseComplete_boo = true; // Wenn zurückgespult, dann true
}
}
}
|
| Geändert von scronic7 am 22.10.10 um 12:16 Uhr | |
| | Beiträge: 172 Wohnort: Wiesbaden Registriert: May 2009
| 22.10.2010, 12:07
|
|