スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--.--.-- | | スポンサー広告

アフィン変換

ワリとよく見かけるサンプルですが、オレもオレもというワケでやってみました。
affine




DisplacementMapFilterを使った場合はムービークリップの形状は変わらず中身が変形されてましたが、MovieClip.transform.matrixを使うとムービークリップ自体が変形されマス。

ムービークリップmcの幅をw、高さをhとして、コレを左上の座標が(x0, y0)、右上の座標が(x1, y1)、左下の座標が(x2, y2)となるよーな変換は、

  mc.transform.matrix = new Matrix(
(x1 - x0) / w, (y1 - y0) / w,
(x2 - x0) / h, (y2 - y0) / h,
x0, y0);
ってカンジです。

ソースコードは以下なカンジです。
import flash.geom.Matrix;

// 初期サイズ
var w:Number = image_mc._width;
var h:Number = image_mc._height;

// ドラッグしているムービークリップ
var dragging:MovieClip = null;

// ボタンイベントをバインドする
topLeft_btn.onPress = doPress;
topLeft_btn.onRelease = doRelease;
topLeft_btn.onReleaseOutside = doRelease;
topRight_btn.onPress = doPress;
topRight_btn.onRelease = doRelease;
topRight_btn.onReleaseOutside = doRelease;
bottomLeft_btn.onPress = doPress;
bottomLeft_btn.onRelease = doRelease;
bottomLeft_btn.onReleaseOutside = doRelease;

function onEnterFrame() {
// マウスドラッグしてなければなにもしない。
if (dragging == null ){
return;
}
dragging._x = _xmouse;
dragging._y = _ymouse;
// 変換行列
var mtx:Matrix
= new Matrix((topRight_btn._x - topLeft_btn._x) / w,
(topRight_btn._y - topLeft_btn._y) / w,
(bottomLeft_btn._x - topLeft_btn._x) / h,
(bottomLeft_btn._y - topLeft_btn._y) / h,
topLeft_btn._x,
topLeft_btn._y);
// 変換
image_mc.transform.matrix = mtx;
}

function doPress() {
dragging = this;
}

function doRelease() {
dragging = null;
}

image_mcは変形対象のムービークリップ、topLeft_btn、topRight_btn、bottomLeft_btnはドラッグできるポイントを示すムービークリップです。
2007/7/19このエントリのサンプルコードはFlash8用に書かれたモノです。Flash CS3で同様のことをするサンプルはFlash CS3でアフィン変換エントリです。
スポンサーサイト

テーマ:Flash - ジャンル:コンピュータ

2007.03.13 | | Comments(0) | Trackback(0) | Flash/ActionScript

«  | HOME |  »

プロフィール

HundredthMonkey

Author:HundredthMonkey
プログラマ。

ブロとも申請フォーム

この人とブロともになる

メールフォーム

名前:
メール:
件名:
本文:

ブログ内検索


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。