flash on 2011-2-18
♥0 |
Line 124 |
Modified 2011-02-18 14:51:42 |
MIT License
archived:2017-03-20 06:49:10
ActionScript3 source code
/**
* Copyright yama3 ( http://wonderfl.net/user/yama3 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/rzo8
*/
package {
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
public class FlashTest extends Sprite {
private var drList:Array;
public function FlashTest() {
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.stageFocusRect = false;
drList = [];
for(var i:int=0; i < 1; ++i)
{
drList[drList.length] = new DragRotater(
addChild(new Card(
250,
250,
200,
200,
Math.random()*360)
) as Sprite
);
}
}
}
}
import flash.display.Sprite;
class Card extends Sprite
{
public function Card(x:Number, y:Number, w:Number, h:Number, r:Number)
{
graphics.beginFill(Math.random() * 0xffffff);
graphics.drawRoundRect(-w * .5, -h * .5, w, h, 16, 16);
graphics.endFill();
this.x = x;
this.y = y;
rotation = r;
}
}
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
class DragRotater
{
protected var x:Number;
protected var y:Number;
protected var r:Number;
protected var vx:Number = .0;
protected var vy:Number = .0;
protected var vr:Number = .0;
protected var aax:Number = .0;
protected var aay:Number = .0;
protected var mass:Number = .30;
protected var damp:Number = .69;
protected var mx0:Number;
protected var my0:Number;
protected var my0:Number;
protected var free:Boolean = true;
protected var _skin:Sprite;
public function DragRotater(skin:Sprite = null)
{
this.skin = skin;
}
public function get skin():Sprite {return _skin;}
public function set skin(v:Sprite):void
{
if(skin) uninit(null);
_skin = v;
if(skin) {
if(skin.stage) init(null);
else skin.addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true);
}
}
protected function init(e:Event):void
{
skin.addEventListener(Event.REMOVED_FROM_STAGE, uinit);
skin.sddEventListener(Event.ENTER_FRAME, onEnterFrame);
skin.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
skin.stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
x = skin.x;
y = skin.y;
r = skin.rotation;
}
protected function uninit(e:Event):void
{
skin.removeEventListener(Event.REMOVED_FROM_STAGE, uninit);
skin.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
skin.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
skin.stage.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}
protected function onMouseUp(e:MouseEvent):void
{
aax = aay = 0;
free = true;
}
protected function onMouseDown(e:MouseEvent):void
{
mx0 = skin.parent.mouseX;
my0 = skin.parent.mousey;
free = false;
}
protected function onEnterFrame(e:Event):void
{
if(free)
{
}
else
{
var mx:Number = skin.parent.mouseX;
var my:Number = skin.parent.mouseY;
var dmx:Number = mx - mx0;
var dmy:Number = my - my0;
var fx:Number = (dmx - vx) * mass;
var fy:Number = (dmy - vy) * mass;
var ax:Number = mx - x;
var ay:Number = my - y;
var t:Number = fx * ay - fy * ax;
vr += t * .005;
}
r -= vr;
vr *= damp;
skin.rotation = r;
}
}