Action Script 3. 角色移动时改变动画

Posted

技术标签:

【中文标题】Action Script 3. 角色移动时改变动画【英文标题】:Action Script 3. Change animations when character moving 【发布时间】:2013-09-23 17:12:35 【问题描述】:

我正在创建简单的 Flash 游戏。我需要在角色移动时更改动画。例如,在前进、奔跑、跳跃、攻击等时。我有不同的动画。只是我不知道如何正确添加它们?

在图书馆中我创建了我的角色,它命名为“英雄”作为链接也“英雄”。我需要双击它并在英雄的时间轴中创建新的图层,名称为跑步、行走、攻击等......然后将动画放在这里?或者我需要在库中创建名称并作为链接“HeroRun”、“heroAttack”等...?

据我所知,我以后需要使用 Hero.gotoAndPlay(run); 之类的东西,但这对我不起作用。很抱歉这些新手问题,但我真的需要你的帮助,谢谢。

例如这是我左转的代码部分:

    if(left)
                Hero.x_speed = -walkspeed;
                setDirection(1);
                Hero.gotoAndPlay(run);// I don't know how to use It correctly

更新

现在的样子: 创建了 MovieClip 角色 Hero

创建层层出不穷

如果想看“命中”动画,现在我需要使用Hero.gotoAndStop("hit");

更新 2 好吧,我做到了,但现在我有问题没有动画只有在我使用Hero.gotoAndStop("attack");后才改变图像,但这里必须是动画。这是攻击 MovieClip 的照片:

这是我的英雄截图。它有 2 个关键帧 Attack 和 Going。

这里是英雄 > 时间线的截图:

更新:

这是我的空间按钮(跳跃角色)代码,当它在地面上显示动画时我有很大的延迟我认为这是因为检查碰撞以及在空中播放动画时没有延迟。

    if(Hero.y_speed>0 && myCollisionList.checkCollisions().length > 0 )
        Hero.y_speed=0;
        Hero.x_speed=0;

        if(space)


            if (ground.hitTestPoint(Hero.x + 28, Hero.y+20, true))

            Hero.gotoAndStop("attack");
            stop();
            Hero.y_speed = -20;

这里是碰撞列表:

        var myCollisionList:CollisionList = new CollisionList(Hero);
        myCollisionList.addItem(ground);
        myCollisionList.addItem(ground3);
        myCollisionList.addItem(ground5);
        myCollisionList.addItem(ground4);

【问题讨论】:

【参考方案1】:

gotoAndPlay() 函数采用帧索引 (int) 或帧标签 (String) 参数,而不是另一个影片剪辑的名称。

您尝试做的事情可以通过多种方式完成——我认为最简单的方法是设置一个MovieClip,其中包含您角色的所有动画作为单独的关键帧。然后,您可以使用唯一标签标记每个关键帧,然后使用 gotoAndStop() 函数在动画之间切换。

首先,将每个角色动画创建为单独的MovieClip - 您不需要导出这些动画(除非您需要以编程方式访问它们)。完成后,创建一个新的MovieClip 并为您制作的每个动画添加一个关键帧。因此,如果您的角色有 4 个动画(例如 walkingidle1idle2running),您将在此剪辑中创建 4 个关键帧。

将每个动画放在其中一个关键帧中(仔细对齐它们,以便在切换角色时不会跳跃),然后用适当的动画名称标记每个关键帧。从库中导出此影片剪辑。您可以通过单击时间轴中的关键帧然后在Properties 窗口中添加标签名称来标记关键帧。一旦框架标签就位,框架将有一个小红旗。这是 Flash CS 5 中带有标签的屏幕截图(图像经过编辑以仅显示相关部分):

完成后,您现在可以创建角色实例并通过调用设置正确的动画状态:

...
Hero.gotoAndStop("walking");
...

如果步行动画在关键帧 1 上,您也可以只使用 Hero.gotoAndStop ( 1 );,但如果您更改动画的顺序,如果您使用帧索引,则必须更新所有代码。使用框架标签要灵活得多。

您需要使用gotoAndStop() 让Flash 停留在指定的关键帧上并继续在该帧中显示动画。如果您使用gotoAndPlay(),您只会看到所有状态动画的第一帧,因为 Flash 在关键帧之间循环。

【讨论】:

感谢您的回答,我用屏幕截图和其他问题更新了我的问题。 @RimantėBaltiejūtė 你的 hitgoing 动画不应该在同一个 MovieClip 中 - 将它们移动到两个单独的剪辑中。然后,您将有两个单独的时间线,每个时间线都有一个图层。之后创建带有 2 个关键帧的第三个 MovieClip,并将关键帧本身标记为 hitgoing @RimantėBaltiejūtė 我编辑了答案以解释如何添加关键帧标签。您现在拥有的(在您的屏幕截图中)是图层标签 - 它们不一样。 谢谢你的回答,我现在按你说的制作了 3 个电影剪辑。 “攻击”、“前进”和“英雄”。在“英雄”中,我创建了 2 个关键帧(我是通过单击鼠标右键“插入关键帧”来完成的),首先我输入了标签名称 - 前进,其他 - 攻击。但是他们是空白的 可以吗?还是我需要做更多的事情?现在我正在尝试 Hero.gotoAndStop("going");什么都没有发生,我的角色根本看不见,没有出现在舞台上。 是的,现在是危险信号,但它们是空白的,我不知道如何从 Going and Attack MovieClips 导入数据。

以上是关于Action Script 3. 角色移动时改变动画的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flash CC/Action Script 3.0 中创建自定义 MovieClip 边界?

如何在 Adob​​e Flash Professional CS6 Action Script 3.0 中阻止可移动对象(通过箭头键移动)离开舞台

Scratch 《DK编程玩起来!》动起来

SpriteKit + Swift - 如何通过缓动移动节点?

我的角色 Sprite Node 移动时抖动,为啥?

用action接收值