PDA

View Full Version : Eased Drag - AS1 to AS3 Conversion



Detrus
April 9th, 2008, 10:55 PM
rewriting some old code from AS1 into AS3, and don't get what I'm doing wrong. The old AS1 code gives the effect of being able to throw a clip around the stage, and when you drag it, it eases slowly, not like startDrag. AS1 works right. AS3 drags, but without the easing or throwing. I traced all the numbers in both, they trace out pretty much the same. Don't get it.

http://detrus.nivr.net/space/bigdragwtf8.swf This is the behavior I'm looking for. Took the code somewhere from this forum a year ago.


onClipEvent (load) {

xFinal = _x;
yfinal = _y;
count = 0
}
onClipEvent (enterFrame) {
if (drag) {

x = _root._xmouse+xDist;
y = _root._ymouse+yd;

} else {

x = xFinal+xDist;
y = yfinal+yd;
}
var sp= 5;

_x = Math.round(_x+(x-(_x-x)-_x)/sp);
_y = Math.round(_y+(y-(_y-y)-_y)/sp);


}

on (press) {
drag = true;
xDist = _x-_root._xmouse;
yd = _y-_root._ymouse;
Mouse.show();
}
on (release, releaseOutside) {
drag = false;
xFinal = _root._xmouse;
yfinal = _root._ymouse;
Mouse.show();

}


in AS3

var xDist:int
var yDist:int

var _dragging:Boolean = false

var xFinal:int
var yFinal:int

var m_x:int
var m_y:int

function dragClip(sprite:Sprite){

if (_dragging){

sprite.x = mouseX + xDist
sprite.y = mouseY + yDist


}

else {

sprite.x = xFinal + xDist
sprite.y = yFinal + yDist

}

var speed:int= 5;

m_x = Math.round ( m_x + ( sprite.x - ( m_x - sprite.x ) - m_x) / speed);
m_y = Math.round ( m_y + ( sprite.y - ( m_y - sprite.y ) - m_y) / speed);

}


stage.addEventListener(Event.ENTER_FRAME, dragHandler)
stage.addEventListener(MouseEvent.MOUSE_DOWN, downHandler)
stage.addEventListener(MouseEvent.MOUSE_UP, upHandler)


function dragHandler(event:Event) { dragClip(dragMe) } //*****y

function downHandler(event:MouseEvent) {

_dragging = true;
xDist = m_x - mouseX;
yDist = m_y - mouseY;



}
function upHandler(event:MouseEvent) {

_dragging = false;
xFinal = mouseX;
yFinal = mouseY;

}any help would be appreciated, or if you have a better example for AS3 altogether send it my way. Thanks

Detrus
April 9th, 2008, 11:44 PM
oh well, got it with code from this thread (http://www.kirupa.com/forum/showthread.php?t=243225&highlight=dragging+easing)

here is my quick AS3 conversion


var ease:int = 2
var targX:int = dragMe.x
var targY:int = dragMe.y
var drag:Boolean = false
var ptX:int
var ptY:int

function down(sprite:Sprite):void{
ptX = sprite.x - mouseX
ptY = sprite.y - mouseY
drag = true

}

function dragC(sprite:Sprite):void{
if (drag) {
targX = mouseX+ptX;
targY = mouseY+ptY;

trace ('targX ' +targX)
trace ('ptX ' +ptX)
}
if (sprite.x != targX || sprite.y != targY) {
sprite.x += (targX-sprite.x)/ease;
sprite.y += (targY-sprite.y)/ease;
}
};

function up(sprite:Sprite):void {
drag = false;
};

stage.addEventListener(Event.ENTER_FRAME, dragHandler)
stage.addEventListener(MouseEvent.MOUSE_DOWN, downHandler)
stage.addEventListener(MouseEvent.MOUSE_UP, upHandler)

function dragHandler(event:Event):void { dragC(dragMe) }
function upHandler(event:MouseEvent):void { up(dragMe) }
function downHandler(event:MouseEvent):void { down(dragMe) }

chalemi
October 12th, 2008, 09:48 PM
awesome!! how would you make the movie clips bounce off the edges with AS 1?

Furpants
February 4th, 2009, 04:41 PM
The code above is awesome!!! Just wanted to say thanks!

andyVern
April 21st, 2009, 04:02 AM
var ease:int = 10;
var targX:int = dragMe.x;
var targY:int = dragMe.y;
var drag:Boolean = false;
var ptX:int;
var ptY:int;

dragMe.addEventListener(Event.ENTER_FRAME, dragHandler, false, 0, true);
dragMe.addEventListener(MouseEvent.MOUSE_DOWN, downHandler, false, 0, true)
stage.addEventListener(MouseEvent.MOUSE_UP, upHandler, false, 0, true)

function dragHandler(e:Event):void
{
if (drag)
{
targX = mouseX+ptX;
targY = mouseY+ptY;
}

e.target.x += (targX-e.target.x)/ease;
e.target.y += (targY-e.target.y)/ease;
}

function upHandler(event:MouseEvent):void
{
drag = false;
}

function downHandler(e:MouseEvent):void
{
ptX = e.target.x - mouseX;
ptY = e.target.y - mouseY;
drag = true;
}

aidanmack
February 8th, 2010, 04:24 AM
Top of the range bit of code right there!

Thanks very much works a treat.

wownflutter
April 13th, 2010, 12:26 AM
How can you code this not to leave the stage.

And, is there a way to have this only travel on the x axis?


Thanks!