0

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

我认为问题可能与.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]);
        }
    }
4

2 回答 2

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。

于 2013-06-16T22:13:05.920 回答
0

正如错误所暗示的那样,它看起来像是类型强制的问题。

尝试将 if 语句的条件替换为:

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

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

于 2013-06-16T22:04:05.907 回答