删除单击的对象

时间:2013-06-16 20:17:05

标签: actionscript-3

我正在尝试删除被点击的数组对象,并将它们添加到另一个数组中以显示其他位置。我发布了当前的代码。

我认为这个问题可能与.currentTarget有关。我尝试将.currentTarget替换为.target,但函数没有超出这一行:if (socket_Array[i] == in_event.target)(在此版本中它的.currentTarget,我只是在说我尝试将其更改为.target时)

我得到的错误是:

TypeError: Error #1034: Type Coercion failed: cannot convert []@2c2a8f11 to flash.display.DisplayObject.

创建对象的函数:

function createSockets():void
{
       var socket_one:socket = new socket ();
       var socket_two: socketyellow = new socketyellow ();
       var socket_three: socketdarkorange = new socketdarkorange ();
       var socket_four: socketlightgreen= new socketlightgreen ();
       var socket_five: socketpurple = new socketpurple ();
       var socket_six: socketdarkgreen = new socketdarkgreen ();

       socket_Array.push(socket_one, socket_two,socket_three, socket_four, socket_five, socket_six);

       for (var i:int=0; i<socket_Array.length; i++)
       {
               addChild(socket_Array[i]);
               socket_Array [i].x = socket_x_position;
               socket_Array [i].y = socket_y_position;
               socket_Array[i].addEventListener(MouseEvent.MOUSE_DOWN, removeItemOnClick);
       }
                temp_update ();
}

假设要删除单击的对象并将其添加到数组中的函数。

  function removeItemOnClick(in_event:MouseEvent):void
    {


    var i:int = 0;
    for (i=0; i<socket_Array.length; i++)
    {

    if (socket_Array[i] == in_event.currentTarget)
    {

    trace ("it goes here");
    var removed = socket_Array.splice(i, 1);
    trace (removed);
    trace (socket_Array );
    var drop:Sprite = in_event.currentTarget as Sprite;
    removeChild (drop);
    removedItem[removedItem.length] = removed;
    createremovedItem ();
    trace (removedItem);
    updateDisplay ();
    choice_updateDisplay ();

    }

    }

    }
    var removedItem_position = 0
    function createremovedItem () {
        for (removedItem_position; removedItem_position<removedItem.length; removedItem_position++){
            addChild (removedItem [removedItem_position]);
        }
    }

2 个答案:

答案 0 :(得分:1)

首先,.currentTarget是正确的。

其次,调用removeChild()然后调用addChild()是没有意义的。这两个电话的净效果都没有。

第二个函数中的几乎所有代码都是不必要的。这是一个较短的版本:

function removeItemOnClick(in_event:MouseEvent):void {
    var index:int = socket_Array.indexOf(in_event.currentTarget);
    var drop:Sprite = socket_Array.splice(index,1) as Sprite;
    removedItem.push(drop);
    updateDisplay();
    choice_updateDisplay();
}

如果要在其他地方显示新项目,只需更改drop.x和drop.y。

答案 1 :(得分:0)

由于错误表明它似乎是类型强制的问题。

尝试用以下内容替换if语句的条件:

    if (DisplayObject(socket_Array[i]) == DisplayObject(in_event.currentTarget))

如果这不起作用,您可能在调试时通过将要比较的两个对象存储到临时变量中来获取更多信息