我制作游戏,基本上我在动画状态方面遇到了一些错误。
public function movementChar()
{
if (touchingGround)
{
if (rightKey)
{
gotoAndStop("run");
scaleX = 1;
}
if (leftKey)
{
gotoAndStop("run");
scaleX = -1;
}
if (upKey)
{
gotoAndStop("jump");
this.y -= 15;
//touchingGround = false;
}
if (attackKey)
{
gotoAndStop("attack");
}
if (!rightKey && !leftKey && !upKey && !attackKey)
{
gotoAndStop("stop");
}
}
}
我还有一些其他编码,说明如果玩家正在触地,那么touchGround = true;
如果确实如此,那么玩家可以向右,向左,向右和向前移动。
问题在于,当我按下攻击键时,它会继续循环播放动画并进行攻击。
我希望攻击键一次播放动画,并使布尔值为hasAttacked = true;一次。
另一个问题是,当玩家移动并且按下/按住攻击键时,动画会冻结。 Flash会对要播放的动画感到困惑,因此它会在第1帧停止并出现故障。
如果有人能告诉我如何解决这个问题,我将不胜感激。
谢谢。
答案 0 :(得分:1)
我的当前机器上没有我的flash开发工具,所以我无法打开fla但是:
我怀疑这是因为没有“消耗”关键事件。也就是说你可能正在设置keyKey,leftKey,attackKey等关键事件和按键事件并在更新功能期间检查状态?
这样做的问题在于每次更新都会像第一次按键一样,每次都需要一些方法知道按键已被处理。
正如我所说,我无法检查你的fla,所以我无法评论最好的方法,但我怀疑你可能不得不大幅改变你的输入处理。
答案 1 :(得分:1)
好的我有一些建议。首先让我们解决你的攻击动画正在循环的事实。您需要进入SirTimmyAttack movieclip时间轴并添加
stop();
在第4帧中,以防止动画永远循环。完成后,动画将播放一次。当你告诉他攻击时你有一个计时器,在计时器执行后他会再次攻击。因此,如果您按住“A”键,他将会攻击...等待计时器... ATTACK ...等待计时器.... ATT等。如果你希望他每按一次“A”键就只能攻击一次,取出那个计时器,永远不要启动它。
开始解决玩家无法同时攻击和行走的第二个问题。这是您当前动画制作方式的技术限制。由于玩家整个动画都包含在一组帧中,因此您无法混合和匹配它们。我建议将你的播放器图形/动画分成两半。上身和下半身。这样你就可以独立于上身/攻击动画触发步行/跑步/站立动画。
希望这有帮助,如果您有任何其他问题,请与我联系。