2016-10-26 1 views
-2

나는 "상자"라고 불리는 mc를 끌고있다. 그러나 끌기는 전혀 매끄럽지 않다."용이함"을 사용하여보다 부드러운 드래그를 수행하려면 어떻게해야합니까?

그래서 "ease"var을 사용하여 어떻게 부드럽게 만들 수 있습니까?

어디서나 "/ 용이함"을 사용하려고하지만 작동하지 않습니다.

var topY:int = stage.stageHeight - box.height; 
var botY:int = 0; 


box.addEventListener(MouseEvent.MOUSE_DOWN, onDown); 
box.addEventListener(MouseEvent.MOUSE_UP, onUp); 
var constrainY:Rectangle = new Rectangle(box.x, topY ,0, box.y+ (box.height-stage.stageHeight) ); 
var dragxy:String = ""; 
function onDown(e:MouseEvent):void 
{ 
    dragxy = mouseX + "_" + mouseY; 
    e.currentTarget.startDrag(false, constrainY); 
    removeEventListener(MouseEvent.MOUSE_DOWN, onDown); 
    addEventListener(MouseEvent.MOUSE_UP, onUp); 
} 
function onUp(e:MouseEvent):void 
{ 
    e.currentTarget.stopDrag(); 
    addEventListener(MouseEvent.MOUSE_DOWN, onDown); 
    removeEventListener(MouseEvent.MOUSE_UP, onUp); 
} 
+0

당신이 무엇을 요구하는지 명확하지 않습니다. 상자를 마우스 뒤를 따라 가면서 뒤에 놓고 최종 위치로 들리시겠습니까? 또는 상자가 더 높은 프레임 속도를 갖도록하여 고르지 않게 보일 수 있도록 하시겠습니까? 또한, 당신은 var 용이성을 사용하기를 원한다고 말합니다. 그것은 문제가 아니므로, 당신이하려고하는 것을 더 잘 설명해야합니다. 상자 안의 "ease in"애니메이션으로 마우스를 따라 가길 원할 것입니다.이 경우'startDrag'가 잘못된 방법입니다. 이징 기능을 작성하거나 온라인에서 사용할 수있는 많은 라이브러리 중 하나를 사용해야합니다. –

답변

0

완화 기능의 간단한 예는 것이다 : 다음

addEventListener(Event.ENTER_FRAME,enterFrame); 

:이 단계에 첨가 등

private function easeTo(obj:MovieClip,currentGoalx:Number,currentGoaly:Number,easeFac:Number):void{ 
    obj.x += (currentGoalx-obj.x)/easeFac; 
    obj.y += (currentGoaly-obj.y)/easeFac; 
} 

가 먼저 타이머를 필요로하거나 프레임 루프로 들어갑니다 enterFrame 함수에서 다음을 수행하십시오 :

private function enterFrame(e:Event):void{ 
    easeTo(box,stage.mouseX,stage.mouseY,3); 
} 

쉬움 편안함 3보다 느리고 부드럽게 쉬움 - 쉬움 2보다 작고, 4는 훨씬 부드럽고 버터함 - 어.

등등. 아이디어는 obj가 각 함수 호출에서 목표까지의 거리의 절반에 도달한다는 것입니다. 따라서이 함수가 모든 프레임에서 호출되는 경우 부드럽고 "쉬운"효과를 얻게됩니다. currentGoal을 마우스 위치로 설정하면, obj는 마우스가 움직일 때마다 따라 가면서 1 : 1 일치는 나타나지 않고 뒤쪽에서 부드럽게 따라 잡습니다.

+0

안녕하세요 닐 데이비스, 내 코드에 어떻게 구현할 수 있습니까? – Noppanat

+0

방금 ​​만든 내 편집을 참조하십시오. –

+0

그리고 프레임 이벤트 수신기를 만드는 방법을 모를 경우를 대비하여 프레임 이벤트에 대한 정보를 추가했습니다. –