0

ブックマークのようなものを作成しようとしています。ステージ上に1つのメモがあり、ユーザーがそれをクリックすると、ドラッグが開始され、ユーザーは必要な場所にドロップします。問題は、これらのメモを複数回ドラッグしたいということです。コードは次のとおりです。

import flash.events.MouseEvent;

//notess is the instance name of the movie clip on the stage
notess.inputText.visible = false;
//delet is a delete button inside the movie clip,
notess.delet.visible = false;
//the class of the object i want to drag
var note:notes = new notes  ;

notess.addEventListener(MouseEvent.CLICK , newNote);

function newNote(e:MouseEvent):void
{
    for (var i:Number = 1; i<10; i++)
    {


        addChild(note);
                //inpuText is a text field in notess movie clip
        note.inputText.visible = false;
        note.x = mouseX;
        note.y = mouseY;        
        note.addEventListener( MouseEvent.MOUSE_DOWN , drag);
        note.addEventListener( MouseEvent.MOUSE_UP , drop);
        note.delet.addEventListener( MouseEvent.CLICK , delet);

    }
}

function drag(e:MouseEvent):void
{
note.startDrag();
}



function drop(e:MouseEvent):void
{
    e.currentTarget.stopDrag();
    note.inputText.visible = true;
    note.delet.visible = true;
}
function delet(e:MouseEvent):void
{
    removeChild(note);
}

どんな助けでもありがたいです。

4

3 に答える 3

0

ドロップするときにノートクラスの新しいインスタンスを作成し、ドラッグしていたノートから場所とその他の変数をコピーし、新しいノートをステージに追加して、ドラッグしたノートを元の位置に戻す必要があります。

何かのようなもの:

function drop($e:MouseEvent):void
{
    $e.currentTarget.stopDrag();
    dropNote($e.currentTarget as Note);
}

var newNote:Note;

function dropNote($note:Note):void
{
    newNote = new Note();
    // Copy vars:
    newNote.x = $note.x;
    newNote.y = $note.y;
    // etc.
    // restore original note. 
    // You will need to store its original position before you begin dragging:
    $note.x = $note.originalX;
    $note.y = $note.orgiinalY;
    // etc.
    // Finally, add your new note to the stage:
    addChild(newNote);
}

...これは実際には疑似コードです。新しいメモをリストに追加する必要があるのか​​、それとも元のメモにリンクする必要があるのか​​わからないためです。GoogleActionScriptドラッグドロップ複製を使用すると、さらに多くの例が見つかります。

于 2012-08-23T08:58:04.033 に答える
0

ドラッグ関数でドラッグオブジェクトをターゲットにしておらず、オブジェクトのインスタンス化に問題があると思います

for (var i:Number = 1; i<numberOfNodes; i++) {

        note = new note();
        addChild(note);
        ...
        ....
    }

 function drag(e:MouseEvent):void{
        (e.target).startDrag();
    }
于 2012-08-23T08:59:10.917 に答える
0

複数の種類のオブジェクト(メモや画像など)をドラッグしている場合は、インスタンス化するオブジェクトの種類をハードコーディングするのではなく、このようなことを行うことができます。

function drop(e:MouseEvent):void{
   // Get a reference to the class of the dragged object
   var className:String = flash.utils.getQualifiedClassName(e.currentTarget);
   var TheClass:Class = flash.utils.getDefinitionByName(className) as Class;

   var scope:DisplayObjectContainer = this; // The Drop Target

   // Convert the position of the dragged clip to local coordinates
   var position:Point = scope.globalToLocal( DisplayObject(e.currentTarget).localToGlobal() );

   // Create a new instance of the dragged object
   var instance:DisplayObject = new TheClass();
   instance.x = position.x;
   instance.y = position.y;
   scope.addChild(instance);
}
于 2013-02-18T20:22:51.160 に答える