Class 如何在as3中使用getChildIndex设置公共变量?
我编写了一个非常简单的程序,可以让你绕着一个圆圈移动,舞台上还有一个矩形。当你拖动矩形时,我想让圆形位于矩形的前面,但是当你松开鼠标时,圆形会被发回 我不知道如何使用getChildIndex方法设置公共变量。我并不真正关心代码的其余部分。我主要感兴趣的是如何使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
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).要将圆放在正方形后面,您需要做的就是发布doaddChild(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指数。例如,如果圆有其他同级(矩形除外),则在不拖动时它需要位于后面。我不确定你是否有足够的信息来判断它是否过于复杂。谢谢你回答我的问题,真的帮了我很多:)谢谢你回答我的问题,真的帮了我很多:)