【问题标题】:Actionscript 3.0 adding and removing childrenActionscript 3.0 添加和删除子项
【发布时间】:2012-03-16 07:55:26
【问题描述】:

所以基本上我有一个名为 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";
    }
}

【问题讨论】:

    标签: actionscript-3 actionscript addeventlistener removechild addchild


    【解决方案1】:

    所以从容器中添加和删除东西实际上是相当昂贵的工具包必须做的重绘本身。并且通常会遇到这样的问题,因为它不能像宣传的那样工作。所以我给你的建议是,当你想控制可见性时,永远不要添加/删除组件。只需将它们标记为可见=false/true,并选择性地记住使用 includeInLayout=true/false。既然你有电影剪辑 visible=true/false 应该就足够了。

    如果您只想让鸡蛋回到原来的位置,只需直接修改它的 x,y 位置即可。我将创建一个简单的方法,它接收一个鸡蛋并设置初始状态的所有属性。在您的 stopEggDrag 方法中,只需调用该函数,传递屏幕上正在吸毒的鸡蛋。 Viola 它弹回到原来的位置。

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

    【讨论】:

      【解决方案2】:

      抱歉,removeChild 没有错误,但我暗示不能再移动鸡蛋了,因为:

      egg.removeEventListener(MouseEvent.MOUSE_DOWN, startEggDrag);
      

      顺便说一句,我确定在这种情况下您不需要 3x Event.ENTER_FRAME。

      我可以建议你不同的方法吗?也许您可以尝试更多类似的方法:

      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";
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2018-05-17
        • 2011-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多