Actionscript 3 Actionscript 3.0添加和删除子项

Actionscript 3 Actionscript 3.0添加和删除子项,actionscript-3,actionscript,addeventlistener,removechild,addchild,Actionscript 3,Actionscript,Addeventlistener,Removechild,Addchild,所以基本上我有一个叫做Jug的MovieClip,当鸡蛋被点击并拖动到Jug时,我希望它消失,然后重新添加到它最初开始的地方。除此之外,我还希望变量的值加上1 我已经尝试了一段时间来摆弄这个,但我无法理解,因为当我删除这个孩子时,它会出错。代码如下: var eggClickOffset:Point = null; var egg:Egg = new Egg(); egg.x = 290; egg.y = 330; addChild(egg); var eggAmount:TextField =

所以基本上我有一个叫做Jug的MovieClip,当鸡蛋被点击并拖动到Jug时,我希望它消失,然后重新添加到它最初开始的地方。除此之外,我还希望变量的值加上1

我已经尝试了一段时间来摆弄这个,但我无法理解,因为当我删除这个孩子时,它会出错。代码如下:

var eggClickOffset:Point = null;
var egg:Egg = new Egg();
egg.x = 290;
egg.y = 330;
addChild(egg);
var eggAmount:TextField = new TextField();
eggAmount.defaultTextFormat = textFormat;
eggAmount.x = 250;
eggAmount.y = 60;
eggAmount.height = 18;
eggAmount.width = 100;
eggAmount.border = true;
eggAmount.text = "Incorrect Amount";
eggAmount.background = true;
eggAmount.backgroundColor = 0xff0000;
stage.focus = eggAmount;
addChild(eggAmount);
var eggs:int;
eggs = 0;

//Egg Event listeners:
egg.addEventListener(Event.ENTER_FRAME, eggAmountCounter);
egg.addEventListener(MouseEvent.MOUSE_DOWN, startEggDrag);
egg.addEventListener(MouseEvent.MOUSE_UP, stopEggDrag);
egg.addEventListener(Event.ENTER_FRAME, dragEgg);
egg.addEventListener(Event.ENTER_FRAME, checkEggCollision);

//starting egg drag:
function startEggDrag(event:MouseEvent):void
{
    eggClickOffset = new Point(event.localX,event.localY);
}

//Stopping the egg drag:
function stopEggDrag(event:MouseEvent):void
{
    eggClickOffset = null;
}

//Egg Dragging:
function dragEgg(event:Event):void
{
    if (eggClickOffset != null)
    {// must be dragging
        egg.x = mouseX - eggClickOffset.x;
        egg.y = mouseY - eggClickOffset.y;
    }
}

//When egg hits jug:
function checkEggCollision(event:Event):void
{
    if (jug.hitTestObject(egg))
    {
            eggs + 1;
            egg.removeEventListener(MouseEvent.MOUSE_DOWN, startEggDrag);
            egg.removeEventListener(Event.ENTER_FRAME, dragEgg);
            removeChild(egg);
            addChild(egg);
            egg.x = 300;
            egg.y = 300;
    }
}

//How many eggs:
function eggAmountCounter(event:Event):void {
    if(eggs == 3){
        eggAmount.text = "Corrent Amount";
    }
}

因此,就工具包重新绘制自身所需的工作而言,从容器中添加和删除内容实际上是相当昂贵的。通常你会遇到这样的问题,但它并没有像广告宣传的那样有效。因此,我的建议是,如果要控制可见性,请不要添加/删除组件。只需将它们标记为visible=false/true,并选择性地记住使用includeInLayout=true/false。因为你有电影剪辑可见=真/假应该足够好

如果你只是想让鸡蛋回到原来的位置,只需直接修改它的x,y位置。我将创建一个简单的方法,它接收一个鸡蛋并设置初始状态的所有属性。在stopEggDrag方法中,只需调用传递屏幕上正在使用药物的鸡蛋的函数。维奥拉,它弹回到原来的地方


这里的诀窍是,如果从不删除对象,就不必解决删除问题。

因此,从容器中添加和删除内容实际上是非常昂贵的,因为工具包需要重新绘制自己。通常你会遇到这样的问题,但它并没有像广告宣传的那样有效。因此,我的建议是,如果要控制可见性,请不要添加/删除组件。只需将它们标记为visible=false/true,并选择性地记住使用includeInLayout=true/false。因为你有电影剪辑可见=真/假应该足够好

如果你只是想让鸡蛋回到原来的位置,只需直接修改它的x,y位置。我将创建一个简单的方法,它接收一个鸡蛋并设置初始状态的所有属性。在stopEggDrag方法中,只需调用传递屏幕上正在使用药物的鸡蛋的函数。维奥拉,它弹回到原来的地方


这里的诀窍是,如果从未删除对象,则不必解决删除问题。

对不起,我在removeChild上没有错误,但我暗示无法再移动鸡蛋,因为:

egg.removeEventListener(MouseEvent.MOUSE_DOWN, startEggDrag);
顺便说一句,我肯定你不需要3倍的事件。在这种情况下,请输入\u帧

我可以向你推荐不同的方法吗?也许你可以试试这样的东西:

var eggStartPos:Point;
egg.addEventListener(MouseEvent.MOUSE_DOWN, startEggDrag);
egg.addEventListener(MouseEvent.MOUSE_UP, stopEggDrag);

//starting egg drag:
function startEggDrag(event:MouseEvent):void
{
    eggStartPos = new Point(egg.x, egg.y);
    egg.addEventListener(Event.ENTER_FRAME, handle_enterFrame);
}

//Stopping the egg drag:
function stopEggDrag(event:MouseEvent):void
{
    egg.removeEventListener(Event.ENTER_FRAME, handle_enterFrame);
    eggStartPos = null;
}

//Handle egg moving and hittest on enter frame
function handle_enterFrame(event:Event):void
{
    egg.x = mouseX;
    egg.y = mouseY;

    if( collisionWithJug(egg) )
    {
        egg.removeEventListener(Event.ENTER_FRAME, handle_enterFrame);
        collisionOccur();
    }
}

function collisionWithJug(target:DisplayObject):Boolean
{
    if (jug.hitTestObject(target))
        return true;
    else
        return false;
}

//Got collision
function collisionOccur():void
{
    eggs += 1;
    egg.x = eggStartPos.x;
    egg.y = eggStartPos.y;

    eggAmountCounter();
}


//How many eggs:
function eggAmountCounter():void
{
    if(eggs == 3)
    {
        eggAmount.text = "Corrent Amount";
    }
}

抱歉,我在removeChild上没有错误,但我暗示无法再移动鸡蛋,因为:

egg.removeEventListener(MouseEvent.MOUSE_DOWN, startEggDrag);
顺便说一句,我肯定你不需要3倍的事件。在这种情况下,请输入\u帧

我可以向你推荐不同的方法吗?也许你可以试试这样的东西:

var eggStartPos:Point;
egg.addEventListener(MouseEvent.MOUSE_DOWN, startEggDrag);
egg.addEventListener(MouseEvent.MOUSE_UP, stopEggDrag);

//starting egg drag:
function startEggDrag(event:MouseEvent):void
{
    eggStartPos = new Point(egg.x, egg.y);
    egg.addEventListener(Event.ENTER_FRAME, handle_enterFrame);
}

//Stopping the egg drag:
function stopEggDrag(event:MouseEvent):void
{
    egg.removeEventListener(Event.ENTER_FRAME, handle_enterFrame);
    eggStartPos = null;
}

//Handle egg moving and hittest on enter frame
function handle_enterFrame(event:Event):void
{
    egg.x = mouseX;
    egg.y = mouseY;

    if( collisionWithJug(egg) )
    {
        egg.removeEventListener(Event.ENTER_FRAME, handle_enterFrame);
        collisionOccur();
    }
}

function collisionWithJug(target:DisplayObject):Boolean
{
    if (jug.hitTestObject(target))
        return true;
    else
        return false;
}

//Got collision
function collisionOccur():void
{
    eggs += 1;
    egg.x = eggStartPos.x;
    egg.y = eggStartPos.y;

    eggAmountCounter();
}


//How many eggs:
function eggAmountCounter():void
{
    if(eggs == 3)
    {
        eggAmount.text = "Corrent Amount";
    }
}