Arrow, pointing to the cursor
♥0 |
Line 131 |
Modified 2009-04-20 01:16:09 |
MIT License
archived:2017-03-09 21:46:19
ActionScript3 source code
/**
* Copyright kalevionni ( http://wonderfl.net/user/kalevionni )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/osK6
*/
package {
import flash.display.*;
import flash.events.*;
public class FlashTest extends MovieClip {
private var mousex:int;
private var mousey:int;
private var arr:Arrow;
public function FlashTest() {
WTrace.initTrace(stage);
arr = new Arrow(1,90);
arr.setPos(stage.stageWidth/2,stage.stageHeight/2);
addChild(arr);
stage.addEventListener(MouseEvent.MOUSE_MOVE,onMouseMove);
stage.addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
private function onMouseMove(evt:MouseEvent):void
{
mousex = evt.stageX;
mousey = evt.stageY;
}
private function onEnterFrame(evt:Event):void
{
arr.pointTo(mousex,mousey);
}
}
}
import flash.display.Sprite;
import flash.display.Graphics;
import flash.events.*;
class Arrow extends Sprite
{
private var m_rotation:Number = 0;
private function drawArrow(scale:Number = 1):void
{
//centrum point
var c:Array = [5,3];
//shape points
var Points:Array = [
[0,2],
[7,2],
[7,0],
[10,3],
[7,6],
[7,4],
[0,4],
[0,2],
];
var g:Graphics = this.graphics;
g.beginFill(0x000000);
for(var x:int = 0;x < Points.length;x++)
{
if (x == 0) g.moveTo((Points[x][0]-c[0])*scale,(Points[x][1]-c[1])*scale);
else g.lineTo((Points[x][0]-c[0])*scale,(Points[x][1]-c[1])*scale);
}
}
public function Arrow(scale:Number = 1, rot:Number = 0):void
{
m_rotation = rot;
drawArrow(scale * 10);
this.alpha = 0.5;
this.rotation = m_rotation;
return;
}
public function setRotation(r:Number):void
{
m_rotation = r;
// this is for future modification for example if we
// want to move the arrow slowly to a specified rotation
// in an enter frame handler
// for now, just set it
this.rotation = m_rotation;
}
public function pointTo(stagex:uint, stagey:uint):void
{
//degrees = radians * 180/Math.PI
var angl:Number;
angl = Math.atan2(stagey-this.y,stagex-this.x) * 180 / Math.PI;
this.setRotation(angl);
}
public function setPos(xx:Number, yy:Number):void
{
if (isNaN(xx) || isNaN(yy)) return;
this.x = xx;
this.y = yy;
}
public function setPosDelta(xx:Number, yy:Number):void
{
setPos(this.x+xx, this.y+yy);
}
public function walk(rad:Number=0,scale:Number=1):void
{
var dx:Number = 0;
var dy:Number = 0;
dx = Math.cos((this.rotation+rad)*Math.PI/180)*scale;
dy = Math.sin((this.rotation+rad)*Math.PI/180)*scale;
setPosDelta(dx,dy);
}
}
/// dummy circle, you can delete it
class Circle extends Sprite
{
public function Circle(size:Number):void
{
var g:Graphics = this.graphics;
this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
g.beginFill(0x000000);
g.drawCircle(0,0,size);
return;
}
private function onAddedToStage(evt:Event):void
{
return;
}
}
/////// TRACE REPLACEMENT //////
import flash.display.Sprite;
import flash.display.Stage;
import flash.text.TextField;
//global trace function
var trace:Function;
//wtreace class
class WTrace
{
private static var tracefield:TextField;
public static function initTrace(stg:Stage):void
{
tracefield= new TextField();
tracefield.autoSize = "left";
stg.addChild(tracefield);
trace = wtrace;
}
public static function wtrace(... args):void
{
var s:String="";
for (var i:int;i < args.length;i++)
{
// imitating flash:
// putting a space between the parameters
if (i != 0) s+=" ";
s+=args[i].toString();
}
tracefield.text = s;
}
}