flash on 2010-8-31
...
@author Martin Jonasson (m@webbfarbror.se)
♥0 |
Line 72 |
Modified 2010-08-31 20:30:30 |
MIT License
archived:2017-03-20 12:02:25
ActionScript3 source code
/**
* Copyright grapefrukt ( http://wonderfl.net/user/grapefrukt )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/dhJ5
*/
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
/**
* ...
* @author Martin Jonasson (m@webbfarbror.se)
*/
public class CurveTest extends Sprite{
private var _canvas:Sprite;
private var _canvas2:Sprite;
private var _output:TextField;
private var _ratio:Number;
private var _target:Number;
public function CurveTest() {
_canvas = new Sprite;
_canvas.x = 10;
_canvas.y = 10;
addChild(_canvas);
_canvas2 = new Sprite;
_canvas.addChild(_canvas2);
_output = new TextField;
_output.x = 220;
_output.y = 10;
_output.defaultTextFormat = new TextFormat("Consolas", 11, 0x000000);
_output.autoSize = TextFieldAutoSize.LEFT;
addChild(_output);
redraw(100, 100);
stage.addEventListener(MouseEvent.CLICK, handleClick);
stage.addEventListener(MouseEvent.CLICK, handleMove);
stage.addEventListener(MouseEvent.MOUSE_MOVE, handleMove);
_canvas.scrollRect = new Rectangle(0, 0, 200, 200);
}
private function handleMove(e:MouseEvent):void {
var clickX:Number = _canvas.mouseX;
if (clickX < 0) clickX = 0;
if (clickX > 200) clickX = 200;
_output.text = _target.toFixed(2) + ", " + (_target * _ratio).toFixed(2) + "\n" +
clickX.toFixed(2) + ", " + (plot(clickX, _target, _ratio)).toFixed(2);
_canvas2.graphics.clear();
_canvas2.graphics.beginFill(0x0000ff);
_canvas2.graphics.drawCircle(clickX, 200 - plot(clickX, _target, _ratio), 5);
}
private function handleClick(e:MouseEvent):void {
redraw(_canvas.mouseX, 200 - _canvas.mouseY);
}
private function redraw(clickX:Number, clickY:Number):void {
if (clickX < 0) clickX = 0;
if (clickX > 200) clickX = 200;
if (clickY < 0) clickY = 0;
if (clickY > 200) clickY = 200;
_canvas.graphics.clear();
_canvas.graphics.beginFill(0xdddddd);
_canvas.graphics.drawRect(0, 0, 200, 200);
_canvas.graphics.beginFill(0xff00ff);
_canvas.graphics.drawCircle(clickX, 200 - clickY, 5);
_ratio = clickY / clickX;
_target = clickX;
_canvas.graphics.endFill();
_canvas.graphics.lineStyle(2, 0x00ff00, 1, true);
for (var i:int = 0; i < 200; i++) {
if (i == 0) {
_canvas.graphics.moveTo(i, 200 - plot(i, _target, _ratio));
} else {
_canvas.graphics.lineTo(i, 200 - plot(i, _target, _ratio));
}
}
}
private function plot(x:Number, target:Number, ratio:Number):Number{
return x * x / target * ratio;
}
}
}