【问题标题】:AS3 key presses cause animation errorAS3 按键导致动画错误
【发布时间】:2014-04-03 12:41:47
【问题描述】:

我正在制作游戏,基本上我的动画状态存在一些错误。

    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;

如果为真,则玩家可以向右、向左、跳跃和攻击。

问题是当我按下攻击键时,它会不断循环动画并进行攻击。

我希望攻击键播放一次动画并使布尔值 h​​asAttacked = true;一次。

另一个问题是当玩家移动并且攻击键被按下/按住时动画会冻结。 Flash 对播放哪个动画感到困惑,因此它在第 1 帧处停止并出现故障。

如果有人能告诉我如何解决这个问题,我将不胜感激。

谢谢。

【问题讨论】:

  • 我想帮助你,但我想我需要更多信息。当闪光灯故障时,您的游戏会完全停止吗?控制台中是否有任何错误?你能提供更多的代码吗?或者甚至更好地将 FLA 发布在某个地方,我愿意将问题作为一个整体来看待并提供任何想法。
  • 感谢您的快速回复!这是我将上传 FLA 的 .swf。请一秒钟。 computing.northampton.ac.uk/~13422770/gameGroup/KD.swf
  • P.S A 攻击,键箭头移动。

标签: actionscript-3 flash animation


【解决方案1】:

好的,我有一些建议。首先让我们解决您的攻击动画正在循环的事实。您需要进入 SirTimmyAttack 影片剪辑时间线并添加

stop();

进入第 4 帧以防止动画永远循环。之后,动画将播放一次。你有一个计时器,当你告诉他攻击时你正在启动,计时器执行后他会再次攻击。因此,如果您按住“A”键,他将攻击...等待计时器...攻击...等待计时器....ATT 等。如果您希望他每次按“A”键只攻击一次,请删除该计时器并且永远不要启动它。

解决您对玩家无法同时攻击和行走的第二个担忧。这是您当前制作动画的方式的技术限制。由于玩家的整个动画都包含在一组帧中,因此您无法混合和匹配来组合它们。我建议将您的播放器图形/动画分成两半。一个上半身,一个下半身。这样您就可以独立于上身/攻击动画触发步行/跑步/站立动画。

希望对您有所帮助,如果您有任何其他问题,请告诉我。

【讨论】:

  • 非常感谢安德鲁,我已经实现了 stop();是的,它确实停止循环动画。我已经更新了代码并删除了计时器。我明白你说的一半是什么意思,这是个好主意。所以当玩家按住 Right Key 时,然后移动下躯干,但如果玩家也按住 Attack 键,则移动下躯干,同时为攻击序列设置动画。我会试试这个,谢谢你的帮助!
【解决方案2】:

我当前的机器上没有我的 Flash 开发资料,所以我无法打开 fla,但是:
我怀疑这是由于没有“消耗”关键事件造成的。即大概您在按键向上和按键向下事件上设置 rightKey、leftKey、attackKey 等,并在更新功能期间检查状态?
这样做的问题是,每次更新都会像第一次按下按键一样,每次,您都需要某种方法来知道按键已被处理。
正如我所说,我无法检查您的 fla,所以我无法评论最佳方法,但我怀疑您可能必须大幅更改您的输入处理。

【讨论】:

  • 我明白了,我需要一个函数来告诉更新方法已经按下了左键,因此它会转到那个动画。
  • @Moynul 您需要确保,例如,当您按下左键时, gotoAndStop("run") 只被调用一次(尽管这可能过于简化,例如,如果您想要要移动,攻击,然后继续移动而不放开键,在这种情况下,您将需要一些更强大的输入管理形式来检查相关键的当前状态,并在状态发生任何变化时启动正确的动画)。
猜你喜欢
  • 2015-04-06
  • 2018-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-20
  • 2021-04-09
  • 1970-01-01
相关资源
最近更新 更多