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;
}
}
}
}
}
미리 도움을 청하십시오. 이렇게하면 :)
감사합니다.하지만 사용해 보았지만 작동하지 않았습니다. 나는 다른 방법으로 그것을 해결했다. 나는 greensock을 사용하여 그것을 움직였다. 그것은 내가 필요로했던 것과 같은 효과를 얻는 데 효과적이었다. 어쨌든 도움을 주셔서 감사합니다. 그런데 어떻게이 질문을 해결 된 것으로 표시합니까? – chb382
위대한, 당신이 해결 방법을 말하지 않으면 해결되지 않습니다 - 다른 사람들을 돕기 위해! –
죄송합니다. 나는 애니메이션에서 easing을 추가하기 위해 프레임 입력 기능 만 필요로 했으므로 Greensock의 트윈 엔진을 대신 사용하여 정상적으로 작동했습니다. 정지 드래그 기능에서 if else 안에 트위닝 코드를 추가했습니다. – chb382