我目前正在使用ActionScript 3在Flash CS6中制作平台游戏。我已设法使用不同的帧将基本精灵设置为单个符号/对象。
每个精灵/动作本身也是一个不同的符号(例如,右边的帧有5个左右,所以我将它们合并为一个单独的符号。然后将该符号复制到player
符号中(或主要符号)。
我设法让我的代码使用gotoAndPlay()
命令运行特定的符号/帧,但我的问题是即使我在循环结束时有stop();
动作,它继续到下一帧。
在这种情况下,它会继续运行'runLeft'动画的第一帧,然后再恢复为正确的'runRight'动画。然而,它继续在两者之间切换并闪烁,直到我放开键。
假设我有两个方向的两个动画,两个长5帧(1a,2a,1b等)。当我按下右箭头键时,它将运行框架;
1a, 1b, 1c, 1d, 1e
然而,在1e
,我有一个stop();
命令,理论上认为,由于案例仍处于活动状态,它将循环回到开始。相反,它做到了这一点;
1a, 1b, 1c, 1d, 1e, 2a, 1a, 2a, 1a
.....等等,直到我释放钥匙。如果我按住左箭头键,它将继续播放“动画3”的第一帧(之后的下一个动画)。
以下是我正在使用的代码,但我不能确定它是DocumentMain.as
代码的问题,但更多的是符号本身的问题?
KeyDown(已按下)处理函数;
switch(e.keyCode)
{
case 37: //Left Arrow
_vx = -5;
_player.gotoAndPlay("runLeft");
break;
case 38: //Up Arrow
_vy = -27;
break;
case 39: //Right Arrow
_vx = 5;
_player.gotoAndPlay("runRight");
break;
default:
}
和KeyUP处理函数;
switch(e.keyCode)
{
case 37: //Left Arrow
_vx = 0;
_player.gotoAndPlay("standLeft");
break;
case 39: //Right Arrow
_player.gotoAndPlay("standRight");
_vx = 0;
break;
default:
}
答案 0 :(得分:1)
这里有几个问题:
几秒后会重复调用向下键,因此它会不断告诉movieClip gotoAndPlay某个帧,这就是为什么你得到重复的 1a,2a,1a ......等动画序列结束时。你只需要在keyDown上调用gotoAndPlay一次,也就是说可能使用布尔来跟踪:
case 37: //Left Arrow keydown
_vx = -5;
if (!isLeft) {
isLeft = true;
_player.gotoAndPlay("runLeft");
}
break;
case 37: //Left Arrow keyup
_vx = 0;
isLeft = false;
_player.gotoAndPlay("standLeft");
break;
希望有所帮助。