2015-01-30 4 views
0

사용자가 내가 제공 한 이미지를 사용하여 무언가를 만들 수있는 드래그 앤 드롭 게임을 만들려고합니다. 사용자가 클릭하여 건물 영역으로 드래그 할 수있는 메뉴에 이미지가 있습니다. 사용자는 원하는만큼 그 이미지의 많은 인스턴스를 추가 할 수 있습니다.액션 스크립트 3 - 새 인스턴스를 드래그 할 수있게 만드는 방법은 무엇입니까?

나는 그 중 일부를 사용할 수있었습니다. 지금까지 이미지를 클릭하고 드래그하여 원하는만큼 인스턴스를 만들 수 있습니다. 그러나 이미지를 놓으면 이미지를 클릭하여 끌 수 없습니다.

이름이 무엇인지 알기 위해 추적 할 때 모든 새 인스턴스의 이름이 hillChild1이라고 표시됩니다. hillChild1, hillChild2 등으로 이름을 붙이려고했지만 그 중 하나가 작동하지 않는 것 같아요. 문제인지는 확실하지 않습니다. 그것은 분명하지 않은 경우 나, StackOverflow에 또한 액션 스크립트 3에 새로운 오전

thesubmenu1.hill.addEventListener(MouseEvent.MOUSE_DOWN, onDown); 
stage.addEventListener(MouseEvent.MOUSE_UP, onUp); 

var myImage:Sprite = Sprite(new Hill_mc()); 
var i:Number=0; i++; 


function onDown(e:MouseEvent):void { 
    var myImage:Sprite = Sprite(new Hill_mc()); 
    myImage.name = "hillChild"+i; 
    addChild(myImage); 
    myImage.x = mouseX; 
    myImage.y = mouseY; 
    myImage.startDrag(); 
    myImage.buttonMode = true; 
} 
function onUp(e:MouseEvent):void { 
    var myImage:Sprite = Sprite(new Hill_mc()); 
    myImage.stopDrag(); 
    myImage.name = "hillChild"; 
} 



stage.addEventListener(MouseEvent.CLICK, traceName); 
function traceName(event:MouseEvent):void { trace(event.target.name); } 



myImage.getChild(myImage).addEventListener("mouseDown", mouseDownHandler); 
stage.addEventListener("mouseUp", mouseUpHandler); 

function mouseDownHandler (e:MouseEvent):void{ 
    myImage.startDrag(); 
} 
function mouseUpHandler (e:MouseEvent):void{ 
    myImage.stopDrag(); 
} 

:

여기 내 코드입니다.

+0

그냥 참고로, Sprite로 캐스팅 할 필요가 없습니다. 'var myImage : Sprite = new Hill_mc();'는 정상적으로 작동합니다. – BadFeelingAboutThis

답변

0

문제는 마우스를 올려 놓을 때 새 인스턴스를 만드는 것입니다 (원하는 경우 마우스가 아래쪽으로 이미 생성 된 인스턴스에 대한 참조). 또한 클릭 리스너를 새로운 객체에 추가하지 마십시오. 마우스를 놓은 후에 만 ​​스테이지에 마우스 수신기를 추가하십시오 (마우스의 수신기를 제거하십시오).

thesubmenu1.hill.addEventListener(MouseEvent.MOUSE_DOWN, createCopy); 

var i:int=0; 
var tmpImage:Sprite; //to store which image is being dragged currently 

function createCopy(e:MouseEvent):void { 
    tmpImage = new Hill_mc(); 
    tmpImage.name = "hillChild"+(i++); //increment every copy 
    addChild(tmpImage); 
    tmpImage.x = mouseX; 
    tmpImage.y = mouseY; 
    tmpImage.startDrag(); 
    tmpImage.buttonMode = true; 
    tmpImage.addEventListener(MouseEvent.MOUSE_DOWN, onDown); //add the mouse down to this new object 
    stage.addEventListener(MouseEvent.MOUSE_UP, onUp); //since the mouse is currently down, we need to listen for mouse up to tell the current copy to stop dragging 
} 

//this will be called when click a copy 
function onDown(e:MouseEvent):void { 
    tmpImage = Sprite(e.currentTarget); //get a reference to the one that was clicked, so we know which object to stop dragging on the global mouse up. 
    stage.addEventListener(MouseEvent.MOUSE_UP, onUp); //listen for the mouse up 
    tmpImage.startDrag(); 
} 
function onUp(e:MouseEvent):void { 
    stage.removeEventListener(MouseEvent.MOUSE_UP,onUp); //now that the mouse is released, stop listening for mouse up 
    tmpImage.stopDrag(); //stop dragging the one that was clicked 
} 
+0

오 마이 맙소사! 당신은 생명의 은인입니다! 나는 내가 발견 할 수있는 모든 것을 시도하면서 거의 3 일을 보냈다 ... – mtdev88