将事件侦听器添加到数组中的项目

时间:2014-04-18 06:58:42

标签: actionscript-3

我有一个带有动画片段(r1,r2等)的数组,每当有一个hittestobject时,它们会动态放置在舞台上。我想为数组中的那些动画片段添加事件侦听器,以便每次点击它们时都要删除 最后一项 。我有这个代码,但它似乎是错误的,因为只有数组的第一个元素被删除。你能帮我吗?

var counter:int = 0;

function releaseToDrop(e:MouseEvent):void
{
    Star(e.target).stopDrag();
    if (Star(e.target).hitTestObject(target))
    {
        removeChild(Star(e.target));
        var replace:Array = [r1,r2,r3,r4,r5,r6,r7,r8]
        addChild(replace[counter]);
        counter = counter+1; 
    }
    else
    {
        trace("No collision.");
        removeChild(Star(e.target));
    }
}

    replace[counter].addEventListener("click", bindClick(o));
    function bindClick(o)
    {
        replace.splice(replace.indexOf(replace[counter]),1); 
        trace(counter);
    }

3 个答案:

答案 0 :(得分:0)

首先,您的 bindClick 函数位于 releaseToDrop 函数内。这样就不会调用该函数。另外,尝试对click事件使用静态refence,因此MouseEvent.Click而不是“click”。 为方便起见,请在 bindClick 函数中跟踪“counter”的当前状态,以便了解要删除的元素。然后,您可能会在逻辑中找出缺陷的位置。

明智之举也是检查计数器不在数组范围之外。所以在 bindClick 中,检查计数器< replace.length 。 (因为替换数组当然必须在 releaseToDrop 的函数范围之外定义。

希望这能让你朝着正确的方向努力。

答案 1 :(得分:0)

是否可以为您生成的每个影片剪辑添加事件侦听器,然后在每个事件处理程序中添加条件以检查单击的影片剪辑是否为 last 项目,然后将其删除(或做你需要做的任何事情。)

你也应该接受鸡的建议。

答案 2 :(得分:0)

对于将来的引用,将addEventListener添加到数组的元素中,以便每次单击它们时,可以通过以下代码完成要删除的最后一项:

import flash.display.Sprite;

var replace:Array = [r1,r2,r3,r4,r5,r6,r7,r8]

var counter:int = 0;

// Every time there is a hittestobject an element of the array is placed on stage
function releaseToDrop(e:MouseEvent):void
{
    Star(e.target).stopDrag();
    if (Star(e.target).hitTestObject(target))
  {
    removeChild(Star(e.target));
          addChild(replace[counter]);
          counter = counter+1; 
    trace(counter);
  }
}

// The first element of the array has an eventListener and when is clicked the last item of that array shown on stage is removed

  var yourSprite:Sprite=new Sprite();
  replace.push(yourSprite);
  replace[0].addEventListener(MouseEvent.CLICK, myClickHandler, false, 0, true);
  function myClickHandler (e:MouseEvent):void
          {
    counter =counter-1;
    if (contains(replace[counter])) 
    removeChild(replace[counter]);
    trace(counter);
    }