AS3:Z做什么?如何拥有深度?

时间:2014-03-07 23:30:14

标签: actionscript-3 layer perspective depth

情景:

Y值越多,影片剪辑的“前面”就越多。

所以,如果我有两个电影片段。

Movieclip1.y is 50
Movieclip2.y is 20

然后movieclip1应该是movieclip2的前面。

如果

movieclip1.y = 20
movieclip2.y = 20
movieclip3.y = 56
movieclip4.y = 921

然后

movieclip4应该是最重要的 movieclip3应该排在第二位 而另外两个应该是相同的深度

类似

this.z = this.y?

但我不知道代码是怎么回事。

2 个答案:

答案 0 :(得分:0)

您可以使用addChild

对它们进行分层
this.addChild(movieclip1);
this.addChild(movieclip2); // is stacked above movieclip1;

您可以使用setChildIndex方法更改顺序:

this.setChildIndex(movieclip1, 1);
this.setChildIndex(movieclip2, 0); // switch the depths

答案 1 :(得分:0)

您可以使用我制作的片段根据它的z值更改MovieClip的深度(伪代码,您可能需要稍微编辑一下):

addEventListener(Event.ENTER_FRAME, changeDepth);

function changeDepth():void
{
    var movs = [movieclip1, movieclip2];
    var movsVal = [movieclip1.z, movieclip2.z];
    var a = movsVal.indexOf(Math.max.apply(movsVal));
    if(movs.indexOf(a) === 0)
    {
        swapChildren(a, movs[movsVal.indexOf(a) + 1])
    }else
    {
        if(movs.indexOf(a) === 1)
        {
            swapChildren(a, movs[movsVal.indexOf(a) - 1])
        }
    }
    movs = [movieclip3, movieclip4];
    movsVal = [movieclip3.z, movieclip4.z];
    a = movsVal.indexOf(Math.max.apply(movsVal));
    if(movs.indexOf(a) === 2)
    {
        swapChildren(a, movs[movsVal.indexOf(a) + 1])
    }else
    {
        if(movs.indexOf(a) === 3)
        {
            swapChildren(a, movs[movsVal.indexOf(a) - 1])
        }
    }
}

基本上检查最大z(3d坐标)并将其与其后面的任何内容交换。