我想我在某处的逻辑上犯了一个错误,但找不到它,我有一个影片剪辑,其中包含 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;
}