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

Posted

技术标签:

【中文标题】如何在 Flash CC/Action Script 3.0 中创建自定义 MovieClip 边界?【英文标题】:How to create custom MovieClip boundaries in Flash CC/Action Script 3.0? 【发布时间】:2016-03-26 12:02:03 【问题描述】:

我正在使用 Flash CC 开发一个小型游戏项目,我制作了一张地图,供玩家控制的角色在其中四处移动。地图(MovieClip)根据玩家的移动方向(也是一个电影剪辑)。墙壁包裹着透明的空间,由场景的颜色填充。

我想知道如何创建一个 MovieClip 边界,它不仅仅将地图包围在一个矩形中,该矩形包围了墙壁和透明空间。基本上,我想要一个专门围绕实际图像本身的 MovieClip 边界。我不确定这在 AS3 或 Flash 本身中是否可行。

如果我所描述的内容是不必要/不可能的,我们也将不胜感激任何解决此问题的方法。非常感谢!

【问题讨论】:

【参考方案1】:

最简单的方法是创建一个新类,比如 Wall,它扩展了 Sprite(您不需要 MovieClip)。

您甚至可以在 Flash CC 中创建该类,而不仅仅是在代码中。

注意三件事:

1) 墙可以有透明填充,没有轮廓。我选择保留它们只是为了让您在图片上看到它。 2) 您需要勾选“Export for ActionScript”复选框并给它一个类名(我选择了“Wall”) 3) 您可以选择将默认基类从MovieClip 更改为Sprite。不会有太大的不同,但它会变得更好。

然后继续将这些墙对象放置在地图上,无论是在 MovieClip 中还是在位图中 - 没关系。只需将任意数量的内容从库中拖到舞台上即可。您也不需要给它们实例名称,除非您想要对特定墙进行特定控制(例如,当玩家拿起钥匙或其他东西时它会自行移除)

在游戏脚本中,您可以像这样在游戏开始时获得所有墙壁:

import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;

function getWallsInAHolder(holder:DisplayObjectContainer):Vector.<Wall>

    var wallArray:Vector.<Wall> = new Vector.<Wall>();

    var currentChild:DisplayObject;
    for ( var i:int = 0; i < holder.numChildren; i++ )
    
        currentChild = holder.getChildAt( i );  
        if ( currentChild is Wall )
            wallArray.push( currentChild );
    

    return wallArray;


trace(getWallsInAHolder(this).length );

关于代码的一些重要说明:

1) 为了不花太多时间,写在框架里。 2) 你仍然可以在你的类中使用 getWallsInAHolder() 方法,它是完全独立的。

然后很容易使用 AABB(或任何其他)碰撞检测来实际检查角色是否与任何墙壁发生碰撞。更好的是,您不必对每面墙的位置(和大小)进行编程 - 只需将它们拖放到 Flash 中!

【讨论】:

非常感谢!我会试一试。 如果此答案正确,请点赞并将其标记为已完成,以帮助其他有相同问题的人。 仔细查看您的答案后,我不确定这是否是我要找的。据我了解,您正在概述制作许多统一墙壁的独特方法。我制作了一张完整的地图,并将其导入到库中,然后将其转换为 MovieClip。然而,它与玩家相对应地移动,因为 MovieClip 边界(据我所知)只能将东西包裹在一个矩形中,玩家只是走过所有东西。我希望玩家能够在任何空白区域中移动,并在击中任何空白区域时停止。这有意义吗? 这是有道理的,但不是从编程的角度来看。如果您想处理地图 MovieClip 以查看给定部分是否为空白 - 这是可能的,但是出于以下几个原因将墙放在图片上要容易得多:a)处理起来更容易 b)您可能想要不要一直检查与每面墙的碰撞 c) 让地图移动对我描述的方法没有问题 - 只需将墙放在地图 MC 中,让墙与地图一起移动。 “这是有道理的,但不是从编程的角度来看。”这是一个非常好的表达方式。我对 AS3 有点陌生,所以我不完全确定我是否理解你的概念,但我认为它仅限于矩形边界,对吧?问题是地图有很多对角线,而且它也是像素化的,所以它是锯齿状的对角线。如果我们正在使用矩形,那么以这种方式制作墙壁对我来说将是非常低效的。您能否描述空白检查的概念,尽管仍然不是一个很好的解决方法?非常感谢您的帮助,我真的很感激。

以上是关于如何在 Flash CC/Action Script 3.0 中创建自定义 MovieClip 边界?的主要内容,如果未能解决你的问题,请参考以下文章

Firefox标准版浏览器支持flash吗?如何开启flash?

Video.js 简单的使用介绍

flash里面,位图动态缩小,如何消除锯齿?

在flash如何制作一个的鼠标跟随特效

如何在 Flash 游戏中更改 URL

flash如何添加遮罩层