Class 如何在as3中使用getChildIndex设置公共变量?

Class 如何在as3中使用getChildIndex设置公共变量?,class,actionscript-3,var,Class,Actionscript 3,Var,我编写了一个非常简单的程序,可以让你绕着一个圆圈移动,舞台上还有一个矩形。当你拖动矩形时,我想让圆形位于矩形的前面,但是当你松开鼠标时,圆形会被发回 我不知道如何使用getChildIndex方法设置公共变量。我并不真正关心代码的其余部分。我主要感兴趣的是如何使getChildIndex方法与公共变量一起工作 package code { import flash.display.MovieClip; import flash.events.MouseEvent; im

我编写了一个非常简单的程序,可以让你绕着一个圆圈移动,舞台上还有一个矩形。当你拖动矩形时,我想让圆形位于矩形的前面,但是当你松开鼠标时,圆形会被发回

我不知道如何使用getChildIndex方法设置公共变量。我并不真正关心代码的其余部分。我主要感兴趣的是如何使getChildIndex方法与公共变量一起工作

package code
{

    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import flash.events.Event;
    import flash.display.Sprite;


    public class Main extends MovieClip
    {           
        public var myCircleIndex:int = getChildIndex(myCircle);

        public function Main()
        {
            myCircle.addEventListener(MouseEvent.MOUSE_DOWN, mouseClicking);
            stage.addEventListener(MouseEvent.MOUSE_UP, mouseReleased);
        }

        public function mouseClicking(e:MouseEvent): void
        {
            myCircle.startDrag();
            setChildIndex(myCircle, numChildren-1);
        }

        public function mouseReleased(e:MouseEvent): void
        {
            myCircle.stopDrag();
            setChildIndex(myCircle, myCircleIndex);
        }
    }
}
我正在使用我在舞台上直接创建的一个实例(“myCircle”)作为电影剪辑

问题在于我在开始时设置的公共变量,它不允许我获取myCircle的子索引,但是如果我将同一行放在一个函数中,它就会工作。
我知道我可以直接将myCircle的索引号放在最后一行(并删除公共变量myCircleIndex),但我发现有一种方法可以将getChildIndex用于类中的公共变量


如何在类内的公共变量中使用getChildIndex?

将圆放在正方形后面所需做的就是发布do
addChild(myRectangle)
addChildAt(myCircle,0)


在我看来,你试图跟踪一个变量,这是把事情复杂化了。让flash在幕后解决这个问题


如果你想更精细一点,只想把圆圈直接放在正方形后面(如果有100层,正方形在12层,但你不确定正方形在哪一层),你可以这样做

addChildAt(myCircle, getChildIndex(myRectangle)-1);
注意

setChildIndex(myCircle,numChildren-1)

那样做很好。更常见的方法是

addChild(myCircle);

它做完全相同的事情。许多人对此感到困惑,认为这会添加一个新的
myCircle
,但如果它已经在显示列表中,它只会将它放在前面,如果它不在显示列表中,它会将它添加到显示列表的顶部z顺序(numChildren-1).

要将圆放在正方形后面,您需要做的就是发布do
addChild(myRectangle)
addChildAt(myCircle,0)


在我看来,你试图跟踪一个变量,这是把事情复杂化了。让flash在幕后解决这个问题


如果你想更精细一点,只想把圆圈直接放在正方形后面(如果有100层,正方形在12层,但你不确定正方形在哪一层),你可以这样做

addChildAt(myCircle, getChildIndex(myRectangle)-1);
注意

setChildIndex(myCircle,numChildren-1)

那样做很好。更常见的方法是

addChild(myCircle);

它做完全相同的事情。许多人对此感到困惑,认为这会添加一个新的
myCircle
,但如果它已经在显示列表中,它只会将它放在前面,如果它不在显示列表中,它会将它添加到显示列表的顶部z顺序(numChildren-1)。

它不起作用的原因,这是因为当行
public var myCircleIndex:int
运行时,时间线对象还不存在

由于这个原因,您不应该尝试访问类级变量声明中的非基本对象,因为在创建这些变量时,类中还没有其他可用的对象

以下是如何重构此文件(请参见代码注释):


它不起作用的原因是,当行
public var myCircleIndex:int
运行时,时间线对象还不存在

由于这个原因,您不应该尝试访问类级变量声明中的非基本对象,因为在创建这些变量时,类中还没有其他可用的对象

以下是如何重构此文件(请参见代码注释):


要将圆放在正方形后面,所需做的就是释放do addChild(方形)或addChildAt(圆形,0);在我看来,你试图跟踪一个变量,这是把事情复杂化了。让flash在幕后进行分类。如果你想更精细一点,只想把圆圈直接放在正方形后面(如果有100层,正方形在12层,但你不确定正方形在哪一层),你可以做
addChildAt(圆圈,getChildIndex(square)-1)将圆放在正方形后面所需的全部操作是发布do addChild(方形)或addChildAt(圆形,0);在我看来,你试图跟踪一个变量,这是把事情复杂化了。让flash在幕后进行分类。如果你想更精细一点,只想把圆圈直接放在正方形后面(如果有100层,正方形在12层,但你不确定正方形在哪一层),你可以做
addChildAt(圆圈,getChildIndex(square)-1)这是一个很好的答案,但可能有很多原因需要跟踪圆的z索引。例如,如果圆有其他同级(矩形除外),则在不拖动时它需要位于后面。不确定你是否有足够的信息来推断它过于复杂。这是一个很好的答案,但可能有很多原因需要跟踪圆的z指数。例如,如果圆有其他同级(矩形除外),则在不拖动时它需要位于后面。我不确定你是否有足够的信息来判断它是否过于复杂。谢谢你回答我的问题,真的帮了我很多:)谢谢你回答我的问题,真的帮了我很多:)