开发者

AS3 Custom Depth Control

开发者 https://www.devze.com 2023-03-05 12:11 出处:网络
I am trying to create a way of controlling movieclip depths, which movieclip is show above another, so that I can set the depth of a movieclip to any number and they will be displayed wit开发者_运维百

I am trying to create a way of controlling movieclip depths, which movieclip is show above another, so that I can set the depth of a movieclip to any number and they will be displayed wit开发者_运维百科h higher values above lower values.

I was thinking of creating a MovieClipDepth class that extends MovieClip with the added property depth, and a Container class that extends DisplayObjectContainer which all objects will be placed inside of.

The Container class will override the addChild method to update the child display order when a child is added.

What I need help with is how do I reorder the children according to their depth value?


As you can read in the comment below your question, there are several methods for this.

But actually, what you asked "set the depth of a movieclip to any number" can't really be done in AS3. If i'm correct, you could do this in AS2, so...

... how was it ...

_root.createEmptyMovieClip("mc", -1000);

or

_root.createEmptyMovieClip("mc1", 1);
_root.createEmptyMovieClip("mc2", 10);

worked, but does not work in AS3. In AS3 depth starts with 0 and you can't force a DisplayObject to sit on a level what is not continous from zero.

So the depths' of 3 movieclips in a container is only possible with these values: 0, 1, 2.

Depth can't be a negative number for example.

Now, if you want to build a custom depth manager, you can do that, but you have to consider these facts.

So to say, you could create virtual depths.

So I guess, you could override the addChildAt method for example. At the moment, if you would give a wrong number: negative, or higher then the number of children, flash would give back the error:

RangeError: Error #2006: The supplied index is out of bounds.

So mc.addChildAt(newchild, -1000) gives an arror.

But with overriding the method, you could make a trick, so you could store the depths in an array. You could store any numbers and then transform that order for the needs of AS3.

Like pairing the depths with the added children, sorting the array by the depths, then manage the children according to the order.

If you have more questions, feel free to ask, hope this gets you closer to the solution.


I suggest you take a look at this tutorial :

A Tour of Depths Management Methods on the website http://www.flashandmath.com/. I presume you not a newbie .

The link is this: http://www.flashandmath.com/intermediate/depths/index.html

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号