2017-09-07 4 views
2

私が探しているのはステージ上でオブジェクトをドラッグしたときに、基本オブジェクト(同じレイヤー)をドラッグして元のオブジェクトが配置されている場所に残したい場合です。複数のオブジェクト状況で配列を使用する必要がありますか? これは1つのオブジェクト(および 'サブオブジェクト')のためのもので、全体で22個あり、サブオブジェクトをムービークリップに追加できません。そうでない場合、ステージ上の他の21個のオブジェクトは重なりますお互いに干渉し合う。Flash AS3複数のオブジェクトをドラッグする

これはこれまで私が持っていたもので、イラストも参照してください。誰かが私に有用なコードを教えてもらえますか?

CF.addEventListener(MouseEvent.MOUSE_DOWN, dragCF); 
CF.addEventListener(MouseEvent.MOUSE_OVER, fadeCF_spaceIN); 
CF.addEventListener(MouseEvent.MOUSE_UP, fadeCF_spaceIN); 

function dragCF(evt:MouseEvent):void { 
    addChild(MovieClip(evt.currentTarget)); 
    evt.currentTarget.startDrag(); 
    stage.addEventListener(MouseEvent.MOUSE_UP, dropCF); } 

function dropCF(evt:MouseEvent):void { 
    stopDrag(); 
    stage.removeEventListener(MouseEvent.MOUSE_UP, dropCF); } 

function fadeCF_spaceIN(evt:MouseEvent):void { 
    CF_space.alpha = .5; 
    stage.addEventListener(MouseEvent.MOUSE_OUT, fadeCF_spaceOUT); 
    stage.addEventListener(MouseEvent.MOUSE_DOWN, fadeCF_spaceOUT);  } 

function fadeCF_spaceOUT(evt:MouseEvent):void { 
    CF_space.alpha = 0; 
    stage.removeEventListener(MouseEvent.MOUSE_OUT, fadeCF_spaceOUT); } 

例イラスト:

+0

それはに関連することでした:[?フラッシュAS3 - ドラッグと一つのターゲットに複数のオブジェクトを削除](HTTPS ://stackoverflow.com/questions/15359919/flash-as3-drag-and-drop-multiple-objects-to-one-target) –

+0

私は確信していませんユーザはステージ上で無作為にターゲットを配置することができるため、ターゲットメソッドを使用することができます。しかし、多分私はあまりにもそれを使用することに精通しています。 – too1s

+0

しかし、そこで使われている配列のアプローチはどうですか?あなたが何か似たようなことをし、すべての選手を並べて保管するとどうなりますか?次に、プレーヤーの1つをドラッグした後、ドラッグされた方向と距離を計算し、その配列の他のすべてのプレイヤーに適用します。 –

答えて

0

あなたのほかに感謝し、そして実際にそれは単純すぎる、もっとシンプルであることが証明された:

object.addEventListener(MouseEvent.MOUSE_DOWN, drag); 
object.addEventListener(MouseEvent.MOUSE_UP, drop); 

function drag(evt:MouseEvent):void { 
    addChild(MovieClip(evt.currentTarget)); 
    evt.currentTarget.startDrag(); 
} 

function drop(evt:MouseEvent):void { 
    stopDrag(); 
    object_space.x = object.x; 
    object_space.y = object.y; 
} 
0
var CF_1:Array = [CF_mc, CF_space]; // instance names 
for each(var CF1_MC:MovieClip in CF_1) 
{ 
    CF1_MC.addEventListener(MouseEvent.MOUSE_DOWN, pickUp); 
    CF1_MC.addEventListener(MouseEvent.MOUSE_UP, dropIt); 
    CF1_MC.startX = CF1_MC.x; 
    CF1_MC.startY = CF1_MC.y; 
} 

function pickUp(event:MouseEvent):void 
{ 
    event.target.startDrag(true); 
    event.target.parent.addChild(event.target); 
} 

function dropIt(event:MouseEvent):void 
{ 
    event.target.stopDrag(); 
} 
+0

私はそれが単なるコード行だと感じていますが、私はあまりにも多くのノブであると思います。私は本当にこれにいくつかの助けが必要です誰も手を貸すことができますか? – too1s

0

はあなたが何を意味するか、100%確認することはできませんが、あなたは代わりのstartDragには、stopDragのENTER_FRAME機能を使用することができますか?これは、オブジェクトの配列でも使用できる最小限の例です。

あなたはまた、その中心点が正確にマウスの位置にある位置にジャンプするdraggableObjectを防ぐために、マウスカーソルとMOUSE_DOWNにdraggableObjectの登録点との差をカウントしたい場合があります場合によっては
var xDifference:Number; 
var yDifference:Number; 
var dragging:Boolean; 

draggableObject.addEventListener(MouseEvent.MOUSE_DOWN, mDown); 
draggableObject.addEventListener(MouseEvent.MOUSE_UP, mUp); 
stage.addEventListener(Event.ENTER_FRAME, loop); 

function loop(evt:Event):void{ 
    if(dragging){ 
     draggableObject.x = mouseX; 
     draggableObject.y = mouseY; 

     secondaryObject.x = draggableObject.x + xDifference; 
     secondaryObject.y = draggableObject.y + yDifference; 
    } 
} 

function mDown(evt:MouseEvent):void{ 
    xDifference = secondaryObject.x - draggableObject.x; 
    yDifference = secondaryObject.y - draggableObject.y; 
    dragging = true; 
} 

function mUp(evt:MouseEvent):void{ 
    dragging = false; 
} 

関連する問題