2017-10-20 59 views
1

En Animer CC, (actionscript 3) J'ai 4 cadres qui ont besoin d'aller dans l'ordre lorsque les "A" ou les boutons "D" sont pressés comme ceci:navigation Actionscript ne fonctionne pas

(((((1 -> 2 -> 3 -> 4 ||| puis retour ||| 4 -> 3 -> 2 -> 1)))))

Cela fonctionne bien, mais quand je suis de retour au cadre 1 après la séquence ci-dessus, en cliquant à côté me envoie tout le chemin à encadrer 4 (en utilisant la trace que tous j'ai identifié les écouteurs d'événements déclenchés et je ne sais pas pourquoi)

est Ci-dessous le code pour chaque image:

cadre 1

stage.addEventListener(KeyboardEvent.KEY_DOWN, nextFram); 
 
function nextFram(e:KeyboardEvent):void{ 
 
if (currentLabel == "home" && e.keyCode == Keyboard.D){ 
 
\t trace("gotobuttonpage"); 
 
\t gotoAndPlay("buttonPage"); 
 
\t removeEventListener(KeyboardEvent.KEY_DOWN, nextFram); 
 
\t trace("event listener removed"); 
 
\t 
 
} 
 
} 
 
stop();

cadre 2

stage.addEventListener(KeyboardEvent.KEY_DOWN, nextFram2); 
 
function nextFram2(e:KeyboardEvent):void{ 
 
if (currentLabel == "buttonPage" && e.keyCode == Keyboard.D){ 
 
\t trace("gotovideopage"); 
 
\t gotoAndPlay("videoPage"); 
 
\t removeEventListener(KeyboardEvent.KEY_DOWN, nextFram2); 
 
\t trace("event listener removed"); 
 
\t 
 
} 
 
} 
 
stage.addEventListener(KeyboardEvent.KEY_DOWN, backFram2); 
 
function backFram2(e:KeyboardEvent):void{ 
 
if (currentLabel == "buttonPage" && e.keyCode == Keyboard.A){ 
 
\t trace("backtohomepage"); 
 
\t gotoAndPlay("home"); 
 
\t removeEventListener(KeyboardEvent.KEY_DOWN, backFram2); 
 
\t trace("event listener removed"); 
 
\t 
 
} 
 
} 
 
stop();

Frame 3

stage.addEventListener(KeyboardEvent.KEY_DOWN, nextFram3); 
 
function nextFram3(e:KeyboardEvent):void{ 
 
if (currentLabel == "videoPage" && e.keyCode == Keyboard.D){ 
 
\t trace("gotoendpage"); 
 
\t gotoAndPlay("endPage"); 
 
\t removeEventListener(KeyboardEvent.KEY_DOWN, nextFram3); 
 
\t trace("event listener removed"); 
 
} 
 
} 
 
stage.addEventListener(KeyboardEvent.KEY_DOWN, backFram3); 
 
function backFram3(e:KeyboardEvent):void{ 
 
if (currentLabel == "videoPage" && e.keyCode == Keyboard.A){ 
 
\t trace("gotobuttonpage!"); 
 
\t gotoAndPlay("buttonPage"); 
 
\t removeEventListener(KeyboardEvent.KEY_DOWN, backFram3); 
 
\t trace("event listener removed"); 
 
} 
 
} 
 
stop();

cadre 4

stage.addEventListener(KeyboardEvent.KEY_DOWN, backFram4); 
 
function backFram4(e:KeyboardEvent):void{ 
 
if (currentLabel == "endPage" && e.keyCode == Keyboard.A){ 
 
\t trace("backtovideopage"); 
 
\t gotoAndPlay("videoPage"); 
 
\t removeEventListener(KeyboardEvent.KEY_DOWN, backFram4); 
 
\t trace("event listener removed"); 
 
\t 
 
} 
 
} 
 
stop();

I également essayé d'utiliser prevFrame(); et nextFrame(); mais le même problème se produit me menant à croire que ma logique séquentielle est saine mais mes auditeurs d'événement sont le problème, s'il vous plaît quelqu'un peut-il faire la lumière sur ceci pour moi.

Répondre

4

Vous avez des choses trop compliquées. Vous n'avez pas besoin de scripts dans chaque image, juste un script de navigation commun qui règle tout.

Option 1.

// Frame 1 script. 

var Frames:Array; 
var currentPage:int; 

// Initialize for the first time. 
if (!Frames) 
{ 
    stop(); 

    // Subscribe for the keyboard event just this once. 
    stage.addEventListener(KeyboardEvent.KEY_DOWN, onKey); 
    Frames = ["home", "buttonPage", "videoPage","endPage"]; 

    // Go to the first page, if necessary. 
    naviGate(-100); 
} 

function naviGate(value:int):void 
{ 
    // Shift the current page. 
    currentPage += value; 

    // Fix the ranges. 
    if (currentPage < 0) 
    { 
     currentPage = 0; 
    } 

    if (currentPage >= Flames.length) 
    { 
     currentPage = Frames.length - 1; 
    } 

    // Go to designated frame. 
    gotoAndStop(Frames[currentPage]); 
} 

// Now, simple keypress handling. 
function onKey(e:KeyboardEvent):void 
{ 
    switch (e.keyCode) 
    { 
     case Keyboard.A: 
      naviGate(-1); 
      break; 

     case Keyboard.D: 
      naviGate(1); 
      break; 
    } 
} 

Option 2.

Il est même préférable de placer les cadres dans un conteneur MovieClip, et de naviguer depuis l'extérieur. Mélanger des cadres et des scripts, comme vous l'avez fait, vous apportera beaucoup de souffrance.