2016-11-27 5 views
1

as3에서 DragDrop 클래스를 만들고 있습니다. 움직일 수있는 무비 클립을 대상 무비 클립에 "붙이려"하고 있습니다. 나는 기본 드래그 드롭과 위치 지정/작동을 고수해 왔지만 Enter Frame을 사용하여 "여유"효과를 만들려고하면 어떻게 든 무비 클립이 0 x 및 y 위치로 이동합니다.as3에서 DragDrop 클래스 만들기

다음은 작동하는 코드입니다 (EnterFrame 이벤트 없음).

package { 
    public class DragDrop { 
     public var clip:MovieClip; 
     public var targ:MovieClip; 
     public var myHomeX:Number; 
     public var myHomeY:Number; 
     public var myFinalX:Number; 
     public var myFinalY:Number; 

     public function selectClip(clipV:MovieClip,targV:MovieClip):void { 
      clip = clipV; 
      targ = targV; 
      var myHomeX = clip.x; 
      var myHomeY = clip.y; 
      var myFinalX = targ.x; 
      var myFinalY = targ.y; 

      clip.addEventListener(MouseEvent.MOUSE_DOWN,startDragging); 
      clip.addEventListener(MouseEvent.MOUSE_UP,stopDragging); 
      clip.addEventListener(MouseEvent.ROLL_OVER,rollOver); 
      clip.addEventListener(MouseEvent.ROLL_OUT,rollOut); 

      function startDragging(e:MouseEvent):void { 
       clip.startDrag(); 
       clip.beingDragged = true; 
       clip.parent.setChildIndex(clip,clip.parent.numChildren - 1); 
      } 

      function stopDragging(e:MouseEvent):void { 
       clip.stopDrag(); 
       clip.beingDragged = false; 
       var onTarget:MovieClip; 
       if (clip.dropTarget != null) 
       { 
        onTarget = e.target.dropTarget.parent; 
       } 
       else 
       { 
        onTarget = null; 
       } 
       if ((onTarget == targ)) 
       { 
        clip.onTarget = true; 
        targ.gotoAndStop(2); 
        clip.x = myFinalX; 
        clip.y = myFinalY; 
       } 
       else 
       { 
        clip.onTarget = false; 
        targ.gotoAndStop(1); 
        clip.x = myHomeX; 
        clip.y = myHomeY; 
       } 
      } 

      function rollOver(e:MouseEvent) { 
       clipGlow.restart(); 
      } 

      function rollOut(e:MouseEvent) { 
       clipGlow.reverse(); 
      } 
     } 
    } 
} 

다음은 작동하지 않는 코드입니다 (EnterFrame 이벤트 사용).

package { 
    public class DragDrop { 
     public var clip:MovieClip; 
     public var targ:MovieClip; 
     public var clip:MovieClip; 
     public var targ:MovieClip; 
     public var myHomeX:Number; 
     public var myHomeY:Number; 
     public var myFinalX:Number; 
     public var myFinalY:Number; 

     public function selectClip(clipV:MovieClip,targV:MovieClip):void { 
      clip = clipV; 
      targ = targV; 
      var myHomeX = clip.x; 
      var myHomeY = clip.y; 
      var myFinalX = targ.x; 
      var myFinalY = targ.y; 

      clip.addEventListener(MouseEvent.MOUSE_DOWN,startDragging); 
      clip.addEventListener(MouseEvent.MOUSE_UP,stopDragging); 
      clip.addEventListener(MouseEvent.ROLL_OVER,rollOver); 
      clip.addEventListener(MouseEvent.ROLL_OUT,rollOut); 
      clip.addEventListener(Event.ENTER_FRAME,slide); 

      function startDragging(e:MouseEvent):void { 
       clip.startDrag(); 
       clip.beingDragged = true; 
       clip.parent.setChildIndex(clip,clip.parent.numChildren - 1); 
      } 

      function stopDragging(e:MouseEvent):void { 
       clip.stopDrag(); 
       clip.beingDragged = false; 
       var onTarget:MovieClip; 
       if (clip.dropTarget != null) 
       { 
        onTarget = e.target.dropTarget.parent; 
       } 
       else 
       { 
        onTarget = null; 
       } 
       if ((onTarget == targ)) 
       { 
        clip.onTarget = true; 
        targ.gotoAndStop(2); 

       } 
       else 
       { 
        clip.onTarget = false; 
        targ.gotoAndStop(1); 
       } 
      } 

      function rollOver(e:MouseEvent) { 
       clipGlow.restart(); 
      } 

      function rollOut(e:MouseEvent) { 
       clipGlow.reverse(); 
      } 

      function slide(e:Event):void { 
       if (! clip.beingDragged && ! clip.onTarget) 
       { 
        clip.x -= clip.x - clip.myHomeX/5; 
        clip.y -= clip.y - clip.myHomeY/5; 
        clip.scaleX += (1 - clip.scaleX)/5; 
        clip.scaleY += (1 - clip.scaleY)/5; 
       } 
       else if (! clip.beingDragged && clip.onTarget) 
       { 
        clip.x -= clip.x - clip.myFinalX/5; 
        clip.y -= clip.y - clip.myFinalY/5; 
        clip.scaleX += (1.5 - clip.scaleX)/5; 
        clip.scaleY += (1.5 - clip.scaleY)/5; 
       } 
      } 
     } 
    } 
} 

미리 도움을 청하십시오. 이렇게하면 :)

답변

0

는 :

var myHomeX = clip.x; 
var myHomeY = clip.y; 
var myFinalX = targ.x; 
var myFinalY = targ.y; 

은 어쩌면 clip.myHomeX는 myHomeX 단지 등을해야 하는가?

function slide(e:Event):void { 
      if (! clip.beingDragged && ! clip.onTarget) 
      { 
       clip.x -= clip.x -myHomeX/5; 
       clip.y -= clip.y -myHomeY/5; 
       clip.scaleX += (1 - clip.scaleX)/5; 
       clip.scaleY += (1 - clip.scaleY)/5; 
      } 
      else if (! clip.beingDragged && clip.onTarget) 
      { 
       clip.x -= clip.x -myFinalX/5; 
       clip.y -= clip.y -myFinalY/5; 
       clip.scaleX += (1.5 - clip.scaleX)/5; 
       clip.scaleY += (1.5 - clip.scaleY)/5; 
      } 
     } 
+0

감사합니다.하지만 사용해 보았지만 작동하지 않았습니다. 나는 다른 방법으로 그것을 해결했다. 나는 greensock을 사용하여 그것을 움직였다. 그것은 내가 필요로했던 것과 같은 효과를 얻는 데 효과적이었다. 어쨌든 도움을 주셔서 감사합니다. 그런데 어떻게이 질문을 해결 된 것으로 표시합니까? – chb382

+0

위대한, 당신이 해결 방법을 말하지 않으면 해결되지 않습니다 - 다른 사람들을 돕기 위해! –

+0

죄송합니다. 나는 애니메이션에서 easing을 추가하기 위해 프레임 입력 기능 만 필요로 했으므로 Greensock의 트윈 엔진을 대신 사용하여 정상적으로 작동했습니다. 정지 드래그 기능에서 if else 안에 트위닝 코드를 추가했습니다. – chb382