スポンサーサイト
2009.01.10 | |
ActionScript勉強中。
以前エントリしたアフィン変換のFlash CS3バージョンです。
画像の左上/右上/左下にある丸のいずれかをドラッグすると、それにあわせて画像が変形します。
やってること自体は以前のエントリと同じで、対象のtransform.matrixプロパティに3つの丸の座標をモトに算出した値をセットしています。
フレームアクションはこんなカンジです。
// ポインタにイベントリスナを登録するtopleft_mc、topright_mc、bottomleft_mcは左上/右上/左下の青い円で、MOUSE_DOWNイベントハンドラとしてonPointMouseDownメソッド、MOUSE_UPイベントハンドラとしてonPointMouseUpメソッドを登録しています。
topleft_mc.addEventListener(MouseEvent.MOUSE_DOWN,
onPointMouseDown);
topleft_mc.addEventListener(MouseEvent.MOUSE_UP,
onPointMouseUp);
topright_mc.addEventListener(MouseEvent.MOUSE_DOWN,
onPointMouseDown);
topright_mc.addEventListener(MouseEvent.MOUSE_UP,
onPointMouseUp);
bottomleft_mc.addEventListener(MouseEvent.MOUSE_DOWN,
onPointMouseDown);
bottomleft_mc.addEventListener(MouseEvent.MOUSE_UP,
onPointMouseUp);
// 対象の幅と高さ
var w:Number = image_mc.width;
var h:Number = image_mc.height;
// ポインタをドラッグ可能にするイベントハンドラ
function onPointMouseDown(evt:Event) {
evt.target.addEventListener(Event.ENTER_FRAME,
onPointEnterFrame);
}
function onPointMouseUp(evt:Event) {
evt.target.removeEventListener(Event.ENTER_FRAME,
onPointEnterFrame);
}
// フレーム毎の処理
function onPointEnterFrame(evt:Event) {
if (evt.target.x != stage.mouseX ||
evt.target.y != stage.mouseY) {
evt.target.x = stage.mouseX;
evt.target.y = stage.mouseY;
// アフィン変換
image_mc.transform.matrix
= new Matrix((topright_mc.x - topleft_mc.x) / w,
(topright_mc.y - topleft_mc.y) / w,
(bottomleft_mc.x - topleft_mc.x) / h,
(bottomleft_mc.y - topleft_mc.y) / h,
topleft_mc.x,
topleft_mc.y);
}
}
2007.07.19 | | Comments(2) | Trackback(0) | Flash CS3
これはアフィン変換ではなくてせんだんですね、
2008-03-23 日 22:24:56 | URL | 通りすがり #- [ 編集]
そうなのですか。
こういう変形はせん断というのですね。
2008-03-23 日 23:00:41 | URL | HundredthMonkey #ZJmJft5I [ 編集]
« | HOME | »
Author:HundredthMonkey
プログラマ。