actionscript 3 - Sprite始终位于顶部

时间:2010-10-11 17:31:16

标签: actionscript-3

我有一个精灵,当它被添加到屏幕上时,我希望它被添加到舞台上的其他所有内容上。

确保添加精灵的最佳方法是在所有内容之上,而不是隐藏在其他精灵之后?

谢谢,

~kcg

4 个答案:

答案 0 :(得分:6)

无论何时添加剪辑,默认情况下它都会添加到顶部。

所以可以使用

addChild(Sprite);

addChildAt(Sprite,this.numChildren );

但如果你出于任何原因使用flash / flex IDE&试图将剪辑保持在所有内容的顶部始终&在运行中并没有真正产生它们,那么我建议你只需将剪辑添加到最顶层。但是因为你已经将它标记为只有动作脚本,所以这里并不存在图层事物。

您也可以考虑将swapchildren用于已有的剪辑和放大器。在父显示对象中交换深度。

swapChildren(DisplayObject, DisplayObject);

答案 1 :(得分:2)

将它添加到舞台上。

stage.addChild(精灵);

您可能正在将其添加到低于另一个的子精灵中:

Stage
    - Child1
        *** Adding here ***
    - Child2
        - Something obscuring your sprite

将其添加到舞台将确保:

Stage
    - Child1
    - Child2
        - Something obscuring your sprite
    *** Adding here ***

答案 2 :(得分:0)

如果父级是顶级MovieClip,则应该可以使用

addChildAt( topSprite , this.numChildren );

当然,如果之后添加了其他Sprite,这将不再起作用,您可以创建两个容器,它们将作为Sprite的父层并为此特定Sprite保留顶层

var bottomLayer:Sprite = new Sprite();
var topLayer:Sprite = new Sprite();

addChildAt( bottomLayer , 0 );
addChild( topLayer );

//somewhere else in your code
bottomLayer.addChild( anySprite );
topLayer.addChild( topSprite );

答案 3 :(得分:0)

这是一个简单的功能:

private function set onTop (displayer:DisplayObject):void
{
    displayer.parent.addEventListener(Event.ADDED, function (event:Event):void
    {
        if (event.target.parent == event.currentTarget)
            DisplayObjectContainer(event.currentTarget).addChild(displayer);

    }, false, 0, true);
}

测试样本如下:

package
{

import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.events.Event;
import flash.filters.GlowFilter;
import flash.text.TextField;


public class Main extends Sprite
{


    public function Main ()
    {
        this.addChild(this.createRandom());
        this.addChild(this.createRandom());

        this.onTop = this.addChild(this.createTop());

        this.addChild(this.createRandom());
        this.addChild(this.createRandom());
        this.addChild(this.createRandom());
        this.addChild(this.createRandom());
    }

    private function set onTop (displayer:DisplayObject):void
    {
        displayer.parent.addEventListener(Event.ADDED, function (event:Event):void
        {
            if (event.target.parent == event.currentTarget)
                DisplayObjectContainer(event.currentTarget).addChild(displayer);

        }, false, 0, true);
    }

    private function createTop ():DisplayObject
    {
        var text:TextField = new TextField();
            text.text = "I'm always on top!";
            text.filters = [new GlowFilter(0xFFFFFF)];

        return text;
    }

    private var index:int = 0;

    private function createRandom ():DisplayObject
    {
        var sp:Sprite = new Sprite();
            sp.x = 10 * this.index;
            sp.y = 2 * this.index;
            sp.graphics.beginFill([0xFF0000, 0x00FF00, 0x0000FF, 0xFFFFFF][this.index++ % 4], 0.8);
            sp.graphics.drawRect(0, 0, 100, 100);
            sp.graphics.endFill();

        return sp;
    }
}
}