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

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

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

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

【问题讨论】:

    标签: actionscript-3 flash actionscript movieclip flash-cc


    【解决方案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 有点陌生,所以我不完全确定我是否理解你的概念,但我认为它仅限于矩形边界,对吧?问题是地图有很多对角线,而且它也是像素化的,所以它是锯齿状的对角线。如果我们正在使用矩形,那么以这种方式制作墙壁对我来说将是非常低效的。您能否描述空白检查的概念,尽管仍然不是一个很好的解决方法?非常感谢您的帮助,我真的很感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    相关资源
    最近更新 更多