Actionscript 3:将MovieClip放在特定图层上?

时间:2011-06-30 02:05:23

标签: actionscript mask layer

我目前正在制作一个平台游戏,我有一堆不同的瓷砖用来形成我的地图。这些瓷砖的外观非常不同,并且相互放置,它们会产生非常明显的变化,这在视觉上并不十分吸引人。我一直试图通过以下方式解决这个问题:

我有四层,每个块两个,我正在褪色。第一层是实际图块(图形)所在的位置。第二层是面具。在掩模层中,我有一个渐变,它与其他图块遮罩层完全相反(遮罩层1向下,遮罩层2向上)。但是,我需要能够动态地改变它们,在适当的图形层中将新的渐变放置在适当的图形层中。

我一直在谷歌搜索最后一个小时左右,试图找到一种方法来定义一个新的MovieClip被放置在哪一层,但我找到的只是setChildIndex,因为一层充当了一个掩码,我不能用。在Actionscript中是否有这样的功能,或者我是手工制作瓷砖的所有组合?

感谢您的帮助, -Birjolaxew

1 个答案:

答案 0 :(得分:1)

尝试使用类似这样的内容:

package
{
    import flash.display.Sprite;

    public class LayeredContainer extends Sprite
    {
        // vars
        private var _layers:Array = [];

        /**
         * Constructor
         */
        public function LayeredContainer()
        {
            createLayer("_fallback_");
        }

        /**
         * Defines the layers to use
         * @param ...layers A list of layers to add
         */
        public function createLayers(...layers):void
        {
            var i:String;
            for each(i in layers)
                createLayer(i);
        }

        /**
         * Creates a single layer, adding it to the top of the display list
         * @param id The layer id
         */
        public function createLayer(id:String):Sprite
        {
            var l:Sprite = new Sprite();
            _layers[id] = l;

            addChild(l);

            return l;
        }

        /**
         * Returns a layer based on id
         * @param id The layer to return
         */
        public function layer(id:String):Sprite
        {
            return _layers[id] || layer("_fallback_");
        }
    }
}

然后你可以创建你的图层并添加如下内容:

var lc:LayeredContainer = new LayeredContainer();
lc.createLayers("tiles", "whatever", "mask");

addChild(lc);

lc.layer("tiles").addChild(_some_tile_you_made_);