スポンサーサイト

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

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

だんだんぼやける残像

前回のエントリと似たようなカンジですが、今度は残像にブラーをかけてみました。




クリックすると、前回っぽい残像になります。

前回はonEnterFrameでムービークリップの_alphaを変化させていましたが、今回はBlurFilterを使用してonEnterFrameでかけるブラーの強さを調整しています。

ソレ以外に前回と変わってる部分としては、

  • 本体(残像ではないムービークリップ)を表示するようにしている
  • 毎フレーム新しい残像を作らずに間を抜くようにした
  • 残像を削除するかどうかの判断にカウンタ変数を使うようにした
あたりデス。

そんでActionScriptは以下のようなカンジです。
import flash.filters.BlurFilter;
// 加速度
var k:Number = 0.4;
// 減衰係数
var a:Number = 0.5;
// 拡大率
var s:Number = 1.05;
// 残像フレーム数
var aiLimit:Number = 8;
// 残像インターバル
var aiInterval:Number = 1;
// 透過率
var ar:Number = 0.8;
// ブラー係数
var b:Number = 3;
// マウスカーソル非表示
Mouse.hide();

// 本体は非表示
jien_mc._visible = false;

// マウスカーソルを追跡するムービークリップ
var depth = _root.getNextHighestDepth();
var chaser_mc:MovieClip
= jien_mc.duplicateMovieClip("chaser_" + depth, depth);
// スピード
chaser_mc.speedX = 0;
chaser_mc.speedY = 0;
// 残像インターバルカウンタ
chaser_mc.intervalCnt = 0;
// アルファ値を変化させる残像か?
chaser_mc.alphaAfterImage = false;
// フレーム毎の処理
chaser_mc.onEnterFrame = function() {
if (this.intervalCnt >= aiInterval) {
// 残像
var afterImage_mc:MovieClip
= createAfterImage(this.alphaAfterImage);
this.swapDepths(afterImage_mc);
// カウンタを初期化
this.intervalCnt = 0;
} else {
this.intervalCnt += 1;
}
// 移動
this.speedX = k * (_xmouse - chaser_mc._x) + a * this.speedX;
this.speedY = k * (_ymouse - chaser_mc._y) + a * this.speedY;
this._x += this.speedX;
this._y += this.speedY;
}
// クリックしたら残像の種類を変更する
chaser_mc.onRelease = function() {
this.alphaAfterImage = !this.alphaAfterImage;
}
// 残像を作成します。
function createAfterImage(alphaAfterImage:Boolean):MovieClip {
// 本体をコピーする
var depth:Number = _root.getNextHighestDepth();
var afterImage_mc:MovieClip
= chaser_mc.duplicateMovieClip("afterImage_" + depth, depth);
afterImage_mc.cnt = 0;
// alphaAfterImageがtrueならアルファ値を変化させる。
// そうでなければブラー
if (alphaAfterImage) {
afterImage_mc.effect = function () {
this._alpha *= ar;
}
} else {
afterImage_mc.blur = b;
afterImage_mc.effect = function () {
this._width *= s;
this._height *= s;
var filter:BlurFilter
= new BlurFilter(this.blur, this.blur, 1);
this.filters = [filter];
this.blur += b;
}
}
// フレーム毎の処理
afterImage_mc.onEnterFrame = function () {
this.effect();
this.cnt += 1;
// 指定フレーム数に達したら消滅
if (this.cnt > aiLimit) {
this.removeMovieClip();
}
}
afterImage_mc.effect();
return afterImage_mc;
}
jien_mcはオーサリングで作ったムービークリップです。
chaser_mcはjien_mcのコピーで、ばねの動きでマウスカーソルを追跡します。
残像は、前回と同じようにduplicateMovieCilpを使って作成しますが、本体を常に再前面に表示したいのでswapDepthsを使って、本体と作成した残像の深度を入れ替えています。

aiIntervalは残像を表示しないフレーム数で、ここでしたフレーム間隔で残像を表示します。
aiLimitは残像を再生するフレーム数で、コレを超えるフレーム表示した残像は消滅します。
スポンサーサイト

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

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

コメント

コメントの投稿


秘密にする

«  | HOME |  »

プロフィール

HundredthMonkey

Author:HundredthMonkey
プログラマ。

ブロとも申請フォーム

この人とブロともになる

メールフォーム

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

ブログ内検索


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