stage.swapChildren(MClip1,Mclip2);不工作

时间:2015-02-26 03:16:18

标签: actionscript-3 flash-cs6

我做了一个拖动和匹配游戏,我有一个矩形圆movieclip ..当矩形/或圆形按一个特定的框矩形将始终在圆后面,圆将永远在重新调整,如果我先拖动矩形然后圈它的确定..但如果我先拖动圆圈然后矩形..circle总是占据ractengle后面的位置我使用stage.swapChildren(ccircle,crect)但它不起作用......这里是我的代码

 crect.addEventListener(MouseEvent.MOUSE_DOWN, item_onMouseDown1);
function item_onMouseDown1(event:MouseEvent):void 
    {
        crect = MovieClip(event.target);
        startX1 = crect.x;
        startY1 = crect.y;
        crect.startDrag();
        setChildIndex(crect, this.numChildren-1);
        stage.addEventListener(MouseEvent.MOUSE_UP, stage_onMouseUp1);

    }
function stage_onMouseUp1(event:MouseEvent):void {

stage.removeEventListener(MouseEvent.MOUSE_UP, stage_onMouseUp1);
crect.stopDrag();

    if(crect.hitTestObject(box3))
    {
        TweenMax.to(crect, 0.5, {x:hit2X, y:hit2Y,height:height2Y, width:weight2X, ease:Cubic.easeOut});
         //crect.mouseEnabled=false;


    }
    else
    {
        TweenMax.to(crect, 0.5, {x:startX1, y:startY1, ease:Bounce.easeOut});

    }
}
ccircle.buttonMode=true;
ccircle.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown1);

function onMouseDown1(event:MouseEvent):void 
    {
        ccircle = MovieClip(event.target);
        startX1 = ccircle.x;
        startY1 = ccircle.y;
        ccircle.startDrag();
        setChildIndex(ccircle, this.numChildren-1);
        stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp1);

    }
function onMouseUp1(event:MouseEvent):void {

stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp1);
ccircle.stopDrag();

    if(ccircle.hitTestObject(box3))
    {
         TweenMax.to(ccircle, 0.5, {x:hit1X, y:hit1Y,height:height1Y, width:weight1X, ease:Cubic.easeOut});
        //stage.swapChildren(ccircle, crect);

        //setChildIndex(ccircle, this.numChildren-1);
         //ccircle.mouseEnabled=false;


    }
    else
    {
        TweenMax.to(ccircle, 0.5, {x:startX1, y:startY1, ease:Bounce.easeOut});

    }
}

4 个答案:

答案 0 :(得分:0)

您无法将ccircle索引更改为-1。只有0,1,2,......

stage.setChildIndex(ccircle, -1);

你应该写:

if (getChildIndex(ccircle) < getChildIndex(crect))
    swapChildren(ccircle, crect);

这意味着:如果ccircle位于crect之下,则将ccircle置于最顶层。

答案 1 :(得分:0)

你可以使用

removeChild(crect);
addChild(crect);

这将始终将crect放在首位。当然,如果您需要ccircle在上面,请执行相同的操作。

答案 2 :(得分:0)

我只需设置setChildIndex(crect,this.numChildren-2); 和setChildIndex(crect,this.numChildren-2);并且它的工作完美,因为它不仅仅用于设置圆形顶部。拖动时我必须将拖动的对象放在其他对象的顶部..

答案 3 :(得分:0)

我还找到了一些你可以阅读的信息 Gary Rosenzweig网站,我一直在flash的显示列表上学习自己。

网站为http://flashgameu.com/,向下滚动查看&#34;了解显示列表。&#34;

它解释了按名称和显示列表中的位置交换子项。

观看他的播客将帮助您使用显示列表与交换子,addChild,removeChild和childIndex来理解选项。

它也是免费的,也是一个很好的网站,提供了一些关于如何使用flash和as3编程的信息。