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() を呼び出しても意味がありません。両方の呼び出しの最終的な効果は何もありません。

2 番目の関数のほとんどすべてのコードは不要です。短いバージョンは次のとおりです。

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))

これがうまくいかない場合は、比較したい 2 つのオブジェクトを一時変数に保存することで、デバッグ中にさらに情報を得ることができます。

于 2013-06-16T22:04:05.907 に答える