2017-10-20 263 views
1

在有生命的CC,(动作3)我有需要按顺序去当“A”或“d”按钮被按下等,从而4个帧:的Actionscript导航不工作

(((((1- - > 2 - > 3 - > 4 |||然后返回||| 4 - > 3 - > 2 - > 1)))))

这工作正常,但当我回到第1帧后上述顺序,点击下一个将我所有的帧4的方式(使用跟踪我确定所有的事件监听器触发的,我不知道为什么)

下面是每一帧代码:

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();

帧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();

帧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();

帧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();

我使用prevFrame也尝试();和nextFrame();但同样的问题导致我相信我的顺序逻辑是正确的,但我的事件听众是问题,请有人可以为我阐明这一点。

回答

4

你过于复杂的东西。您不需要在每个框架中使用脚本,只需要一个统一的导航脚本即可。

选项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; 
    } 
} 

选项2

将帧放入某个MovieClip容器并从外部导航它甚至更好。像你一样混合框架和脚本,会给你带来很多痛苦。