as3 导航 - 转到和播放脚本无法始终如一地工作



我想我在某处的逻辑上犯了一个错误,但找不到它,我有一个影片剪辑,其中包含 4 个进一步的动画电影剪辑,每个剪辑在特定帧处都有 stop() 动作,还有 2 个按钮,一个用于向左移动,另一个用于向右移动,如果用户单击说右、右、右、 第一次向右,向左,向左,向左,但随后事情停止了正确评估。

正在对变量使用开关大小写语句来挑选要进行动画处理的 mc,使用 If Else 语句会更好吗?这是我的代码,因为很明显,动作脚本不是我的强项!

import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.events.Event;
import fl.text.TLFTextField;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
// Global variables
var mcWidth:int = 768;
var mcPosInc:int = 0;
var boxAnimPlay:int = 1;
var mcMoving:Boolean = false;
var buttonClicked:String = "right";
var mcLeft;
var mcRight;
addEventListener(Event.ENTER_FRAME, frameHandler);
// frame Handler
function frameHandler(event:Event):void
{
// Initialize button click events
controlGrp.bttn_left.addEventListener(MouseEvent.CLICK, goLeft); 
controlGrp.bttn_right.addEventListener(MouseEvent.CLICK, goRight);
function goLeft(e:MouseEvent):void {
buttonClicked = "left";
// change position
if (mcPosInc > 0 && mcMoving == false) {
    mcMoving = true;
    mcPosInc --;
    boxAnimPlay --;
    // Scroll mc1
    mcLeft = new Tween(mc1, "x", Regular.easeOut, mc1.x, mc1.x + mcWidth, 1.5, true);
    mcLeft.addEventListener(TweenEvent.MOTION_FINISH, end);
    function end(event:TweenEvent) {
        mcMoving = false;
    }
    if (boxAnimPlay >= 1) {
    switch (boxAnimPlay) {
        case 3:
            mc1.box4.gotoAndPlay(17);
            mc1.box3.gotoAndPlay(31);
        break;
        case 2:
            mc1.box2.gotoAndPlay(31);
            mc1.box3.gotoAndPlay(46);
        break;
        case 1:
            mc1.box1.gotoAndPlay(17);
            mc1.box2.gotoAndPlay(46);
        break;
        }
    }
    trace(boxAnimPlay);
    trace(buttonClicked);
}
}
}
// Play movie tests
function goRight(e:MouseEvent):void {
buttonClicked = "right";
// change position
if (mcPosInc < 3 && mcMoving == false) {
    mcMoving = true;
    mcPosInc ++;
    boxAnimPlay ++;
    // Scroll mc1
    mcRight = new Tween(mc1, "x", Regular.easeOut, mc1.x, mc1.x - mcWidth, 1.5, true);
    mcRight.addEventListener(TweenEvent.MOTION_FINISH, end);
    function end(event:TweenEvent) {
        mcMoving = false;
    }
if (boxAnimPlay <= 4) {
switch (boxAnimPlay) {
    case 1:
    break;
    case 2:
        mc1.box1.gotoAndPlay(1);
        mc1.box2.gotoAndPlay(1);
    break;
    case 3:
        mc1.box2.gotoAndPlay(16);
        mc1.box3.gotoAndPlay(1);
    break;
    case 4:
        mc1.box3.gotoAndPlay(16);
        mc1.box4.gotoAndPlay(1);
    break;
    }
}
    trace(boxAnimPlay);
    trace(buttonClicked);
}   
// Add Text Labels to TitleGroup
switch (boxAnimPlay) {
    case 1:
        readout.text = "test";
    break;
}
}

我修复了它,基本上我在gotoAndPlay中定位的帧包含stop()语句,一旦我针对后续帧,即

而不是:

switch (boxAnimPlay) {
    case 3:
        mc1.box4.gotoAndPlay(17);
        mc1.box3.gotoAndPlay(31);
    break;
    case 2:
        mc1.box2.gotoAndPlay(31);
        mc1.box3.gotoAndPlay(46);
    break;
    case 1:
        mc1.box1.gotoAndPlay(17);
        mc1.box2.gotoAndPlay(46);
    break;
    }

我用了这个:

switch (boxAnimPlay) {
    case 3:
        mc1.box4.gotoAndPlay(17);
        mc1.box3.gotoAndPlay(32); // no stop on subsequent frame
    break;
    case 2:
        mc1.box2.gotoAndPlay(32); // no stop on subsequent frame
        mc1.box3.gotoAndPlay(47); // no stop on subsequent frame
    break;
    case 1:
        mc1.box1.gotoAndPlay(17);
        mc1.box2.gotoAndPlay(47); // no stop on subsequent frame
    break;
    }

最新更新