{lang: 'de'}
Flashhilfe.de - Flash Community

functionschaos für timer und schleife zum rückwärts spielen [Flash 10]

 


AntwortenRegistrieren Seite1  

scronic7#1
Benutzerbild von scronic7
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);
      }
     
}*/
scronic7#2
Benutzerbild von scronic7
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
stealth_axg#3
Benutzerbild von stealth_axg
Beiträge: 172
Wohnort: Wiesbaden
Registriert: May 2009

22.10.2010, 12:07