【问题标题】:Actionscript navigation not workingActionscript 导航不起作用
【发布时间】:2018-04-01 10:37:03
【问题描述】:

在动画 CC 中,(动作脚本 3)当按下“A”或“D”按钮时,我有 4 帧需要按顺序进行:

(((((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){
	trace("gotobuttonpage");
	gotoAndPlay("buttonPage");
	removeEventListener(KeyboardEvent.KEY_DOWN, nextFram);
	trace("event listener removed");
	
} 
}
stop();

第 2 帧

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

第 3 帧

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

第 4 帧

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

我也尝试过使用 prevFrame();和下一个帧();但是发生了同样的问题,导致我相信我的顺序逻辑是合理的,但我的事件监听器是问题所在,请有人为我解释一下。

【问题讨论】:

    标签: actionscript-3 flash navigation animate-cc


    【解决方案1】:

    你把事情复杂化了。您不需要在每一帧中都使用脚本,只需要一个通用的导航脚本即可。

    选项 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 容器中,并从外部对其进行导航。像你那样混合框架和脚本,会给你带来很多痛苦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-22
      • 2019-01-15
      • 2013-07-12
      • 1970-01-01
      • 1970-01-01
      • 2017-03-06
      相关资源
      最近更新 更多