Actionscript 3 - Sprite Всегда на вершине - PullRequest
3 голосов
/ 11 октября 2010

У меня есть спрайт, и когда он добавляется на экран, я хочу, чтобы он был добавлен поверх всего остального на сцене.

Каков наилучший способ убедиться, что спрайт при добавлении находится поверх всего и не скрыт за другими спрайтами?

Спасибо

~ кг

Ответы [ 4 ]

6 голосов
/ 11 октября 2010

Каждый раз, когда вы добавляете клип, он добавляется сверху по умолчанию.

Так можно использовать

addChild(Sprite);

или

addChildAt(Sprite,this.numChildren );

Но если по какой-либо причине выесли вы используете flash / flex IDE и пытаетесь держать клип поверх всего всегда и не вызывать его на ходу, то я бы посоветовал вам просто добавить клип в самый верхний слой.Но поскольку вы пометили его как только actionScript, здесь слой на самом деле здесь не существует.

Также вы можете рассмотреть возможность использования swapchildren для уже существующих клипов и замены глубин их уровней в родительском экранном объекте.

2 голосов
/ 12 октября 2010

Добавьте его на сцену.

stage.addChild (sprite);

Возможно, вы добавляете его в дочерний спрайт, который находится ниже другого:

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

Добавление его на сцену обеспечит:

Stage
    - Child1
    - Child2
        - Something obscuring your sprite
    *** Adding here ***
0 голосов
/ 12 октября 2010

Вот простая функция для вашей цели:

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;
    }
}
}
0 голосов
/ 11 октября 2010

При условии, что родительский ролик является лучшим MovieClip, это должно работать

addChildAt( topSprite , this.numChildren );

Конечно, если впоследствии добавить другие спрайты, это больше не будет работать, вы можете создать два контейнера, которые будут действовать как родительские слои для ваших спрайтов и зарезервировать верхний слой для этого конкретного спрайта

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 );

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...