2017-09-07 15 views
2

무대에서 객체를 드래그하면 기본 객체 (같은 레이어)를 드래그하여 기본 객체를 배치 할 위치를 유지할 수 있습니다. 여러 객체 상황에서 배열을 사용해야합니까? 이것은 하나의 객체 (및 '하위 객체')를위한 것일 뿐이며 총 22 개의 하위 객체가있을 수 있습니다. 하위 객체를 무비 클립에 추가 할 수 없습니다. 그렇지 않으면 무대의 다른 21 개 객체가 겹칠 것입니다 서로 간섭하는 것.플래시 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

그러나 거기에 사용 된 배열을 사용하는 접근 방식은 어떻습니까? 비슷한 일을하고 모든 플레이어를 배열에 저장하면 어떨까요? 그런 다음 플레이어 중 하나를 드래그 한 후 드래그 한 방향과 거리를 계산하여 해당 배열의 다른 모든 플레이어에게 적용 할 수 있습니다. (나는 당신이하고 싶은 일을하고 있다고 생각한다.) –

답변

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 기능을 사용할 수 있습니까? 여기에 객체의 배열과 함께 사용할 수있는 아주 간단한 예가 있습니다.

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; 
} 

당신은 또한 중심점 마우스 위치에 정확히 어디에 위치로 이동 통해 DraggableObject을 방지하기 위해 마우스 커서와 MOUSE_DOWN에 통해 DraggableObject의 등록 포인트의 차이를 계산 할 수 있습니다 경우에 따라. 당신을 추가하기위한