forked from: follow ball
forked from follow ball (diff: 2)
ActionScript3 source code
/**
* Copyright jules ( http://wonderfl.net/user/jules )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/czwo
*/
// forked from debosotnas's follow ball
package {
import flash.events.Event;
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.events.MouseEvent;
public class FlashTest extends Sprite {
private var fuerza:Number = .5;
private var vx:Number = 0;
private var vy:Number = 0;
private var easing:Number = .2;
private var spring:Number = 100;
private var friction:Number = .95;
private var tmp_vx:Number = 0;
private var tmp_vy:Number = 0;
public var mc:MovieClip;
public var tmp_d:uint = 1;
public function FlashTest() {
mc = new MovieClip();
mc.graphics.beginFill(0x9F9F9F);
mc.graphics.drawCircle(0,0,40);
mc.graphics.beginFill(0xF0F0F0);
mc.graphics.drawCircle(0,0,30);
mc.graphics.beginFill(0x9F9F9F);
mc.graphics.drawRect(0,-5,30, 10);
addChild(mc);
mc.addEventListener(MouseEvent.MOUSE_DOWN, on_m_down);
mc.buttonMode = true;
addEventListener(Event.ENTER_FRAME, on_enter_frame);
}
private function on_m_down(e:MouseEvent):void{
mc.startDrag();
stage.addEventListener(MouseEvent.MOUSE_UP, on_m_up);
}
private function on_m_up(e:MouseEvent):void{
mc.stopDrag();
stage.removeEventListener(MouseEvent.MOUSE_UP, on_m_up);
}
private function on_enter_frame(e:Event):void{
var dif_X:Number = this.mouseX - mc.x;
var dif_Y:Number = this.mouseY - mc.y;
var rad_ang_tmp:Number = Math.atan2(dif_X, dif_Y);
var grad_ang_tmp:Number = rad_ang_tmp * 180 / Math.PI;
if(tmp_d == 1){
if(Math.abs(dif_X) <= fuerza && Math.abs(dif_Y) <= fuerza){
return;
}
mc.rotation = -(grad_ang_tmp - 90);
var ax:Number = Math.sin(rad_ang_tmp) * fuerza;
var ay:Number = Math.cos(rad_ang_tmp) * fuerza;
vx += ax;
vy += ay;
mc.x += vx;
mc.y += vy;
}else if(tmp_d == 2){
var _vx:Number = (mouseX - mc.x) * easing;
var _vy:Number = (mouseY - mc.y) * easing;
mc.x += _vx;
mc.y += _vy;
}else if(tmp_d == 3){
var ttx:Number = stage.stageWidth / 2;
var tty:Number = stage.stageHeight / 2;
var dx:Number = mouseX - mc.x;
var _ax:Number = dx * spring;
var dy:Number = mouseY - mc.y;
var _ay:Number = dy * spring;
tmp_vy += _ay;
tmp_vy *= friction;
mc.y += tmp_vy;
tmp_vx += _ax;
tmp_vx *= friction;
mc.x += tmp_vx;
}
/*
return;
//follow mouse overflow
var dif_X:Number = this.mouseX - mc.x;
var dif_Y:Number = this.mouseY - mc.y;
/--*
if(Math.abs(dif_X) <= fuerza && Math.abs(dif_Y) <= fuerza){
//vx = vy = 0;
return;
}
*--/
var rad_ang_tmp:Number = Math.atan2(dif_X, dif_Y);
var grad_ang_tmp:Number = rad_ang_tmp * 180 / Math.PI;
mc.rotation = -(grad_ang_tmp - 90);
/--*
var ax:Number = Math.sin(rad_ang_tmp) * fuerza;
var ay:Number = Math.cos(rad_ang_tmp) * fuerza;
vx += ax;
vy += ay;
mc.x += vx;
mc.y += vy;
*--/
/--*
follow mouse easing
var vx:Number = (mouseX - mc.x) * easing;
var vy:Number = (mouseY - mc.y) * easing;
mc.x += vx;
mc.y += vy;
*--/
//follow mouse spring
var ttx:Number = stage.stageWidth / 2;
var tty:Number = stage.stageHeight / 2;
var dx:Number = mouseX - mc.x;
var ax:Number = dx * spring;
var dy:Number = mouseY - mc.y;
var ay:Number = dy * spring;
tmp_vy += ay;
tmp_vy *= friction;
mc.y += tmp_vy;
tmp_vx += ax;
tmp_vx *= friction;
mc.x += tmp_vx;
*/
}
}
}
