スポンサーサイト
2009.01.10 | |
ActionScript勉強中。
曇ったガラスを指で拭くようなカンジのサンプルです。画像の上でマウスボタンを押して動かすとその部分だけクリアになります。
コレは、ビンの画像の上に置いてあるノイズ画像の一部を消去するってやり方で実現してマス。
ノイズ画像の部分消去は、BlendMode#ERASEなスプライトを作ってソイツに消したいカタチを描いてマス。サンプルでは、その部分をスプライトを継承したクラスにしてます。
package {
import flash.display.*;
/**
* 曇りガラス風スプライト。
*/
public class Frost extends Sprite {
/** 消去半径 */
var r:Number = 10;
/** 逆マスクスプライト */
var msk:Sprite;
/**
* コンストラクタ。
*/
public function Frost() {
blendMode = BlendMode.LAYER;
// 逆マスクを生成
msk = new Sprite();
msk.blendMode = BlendMode.ERASE;
addChild(msk);
}
/**
* 指定した座標周辺を透明にする。
* @param x 消去円のx座標
* @param y 消去円のy座標
*/
public function erase(eraseX:Number, eraseY:Number):void {
var mg:Graphics = msk.graphics;
mg.beginFill(0xFFFFFF, 1.0);
mg.drawCircle(eraseX, eraseY, r);
mg.endFill();
}
}
}コンストラクタで生成しているmskがBlendMode#ERASEなスプライトです。ヘルプでBlendMode#ERASEの説明を読むと、親表示オブジェクトのblendModeプロパティをBlendMode#LAYERにせよ。と書いてあるのでコンストラクタでFlost自体のblendModeはBlendMode#LAYERにしてます。// Frostのインスタンスを生成
var frost:Frost = new Frost();
frost.x = image_mc.x;
frost.y = image_mc.y;
addChild(frost);
// 曇り画像を生成
var bd:BitmapData = new BitmapData(image_mc.width, image_mc.height);
bd.noise(Math.random() * int.MAX_VALUE,
0x80,
0xFF,
BitmapDataChannel.ALPHA,
true);
// frostに画像を描画
var g:Graphics = frost.graphics;
g.beginBitmapFill(bd);
g.drawRect(0, 0, image_mc.width, image_mc.height);
g.endFill();
// マウスボタンを押下してるかチェック
var erasing:Boolean = false;
frost.addEventListener(MouseEvent.MOUSE_DOWN,
function(e:Event) {
erasing = true;
});
addEventListener(MouseEvent.MOUSE_UP,
function(e:Event) {
erasing = false;
});
// フレームイベントハンドラ
frost.addEventListener(Event.ENTER_FRAME,
function(e:Event) {
// マウスボタンを押下中ならマウスカーソル周辺を消去
if (erasing) {
frost.erase(e.target.mouseX, e.target.mouseY);
}
});
2007.10.18 | | Comments(1) | Trackback(0) | Flash CS3
« | HOME | »
Author:HundredthMonkey
プログラマ。