[朝ワン] Matrix の勉強2
[朝ワン] Matrix の勉強2 回転
赤い丸 : どこを中心に回転させるか。
青い丸 : 赤い点(回転の中心)をどこに表示させるか。
それぞれドラッグできる。
/**
* Copyright bkzen ( http://wonderfl.net/user/bkzen )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/vDxe
*/
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Graphics;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Rectangle;
import flash.events.MouseEvent;
import flash.geom.Matrix;
/**
* [朝ワン] Matrix の勉強2 回転
* 赤い丸 : どこを中心に回転させるか。
* 青い丸 : 赤い点(回転の中心)をどこに表示させるか。
* それぞれドラッグできる。
*
*/
[SWF(width = "465", height = "465", backgroundColor = "0xFFFFFF", frameRate = "30")]
public class Asawon3 extends Sprite
{
private var bmd:BitmapData;
private var sh: Shape;
private var bg:Sprite;
private var hand:Sprite;
private var hand2:Sprite;
private var bounds:Rectangle;
private var frame: int;
public function Asawon3()
{
// write as3 code here..
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e: Event = null): void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// さぁはじめよ。
// 矢印書いた。方向が分かれば何でもよかったけどとりあえずこれで。
sh = new Shape();
var g: Graphics = sh.graphics;
g.beginFill(0xFFFFFF);
g.lineStyle(1);
g.moveTo(20, 30);
g.lineTo(90, 30);
g.lineTo(90, 0);
g.lineTo(150, 50);
g.lineTo(90, 100);
g.lineTo(90, 70);
g.lineTo(20, 70);
g.lineTo(20, 30);
bg = new Sprite(); // 入れ物
hand = new Sprite(); // ハンドル 1
hand2 = new Sprite(); // ハンドル 2
addChild(bg);
g = bg.graphics;
g.beginFill(0xCCCCCC);
g.drawRect(0, 0, 190, 455);
bg.x = bg.y = 10;
bounds = new Rectangle(0, 0, 190, 455);
g = hand.graphics;
g.beginFill(0xCC3333);
g.drawCircle(0, 0, 5);
g = hand2.graphics;
g.beginFill(0x3333CC);
g.drawCircle(0, 0, 5);
hand.buttonMode = true;
hand2.buttonMode = true;
hand.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
hand2.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
hand.x = (sh.width + sh.getRect(this).left) / 2;
hand.y = (sh.height + sh.getRect(this).top) / 2;
bg.addChild(sh);
bg.addChild(hand);
bg.addChild(hand2);
// 表示
bmd = new BitmapData(265, 455, true, 0x0);
var bmp: Bitmap = Bitmap(addChild(new Bitmap(bmd)));
bmp.x = 200;
bmp.y = 10;
addEventListener(Event.ENTER_FRAME, loop);
}
private function onMouseDown(e:MouseEvent):void
{
var h: Sprite = Sprite(e.target);
bg.addChild(h);
h.startDrag(false, bounds);
h.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
h.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}
private function onMouseUp(e:MouseEvent):void
{
var h: Sprite = Sprite(e.target);
h.stopDrag();
h.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
}
private function loop(e:Event):void
{
bmd.lock();
bmd.fillRect(bmd.rect, 0x0);
var matrix: Matrix = new Matrix();
matrix.translate(- hand.x, - hand.y);
matrix.rotate(frame * Math.PI / 180);
matrix.translate(hand2.x, hand2.y);
bmd.draw(sh, matrix, null, null, null, true);
bmd.unlock();
frame++;
}
}
}