- 2008-08-17 (日)
- Action Script 3.0
AS3 を触りだして、様々なライブラリがあることに驚いたものだ。
それで、ついつい、いろんなライブラリを試してみたくて、あーだこーだとサンプルを作ってみたりなんだりしている今日この頃だが、だからと言って、なんでもかんでもライブラリ・ライブラリというのもどうなのかなー、なんて、プチ反抗期のように生意気なことを、三流ながらも、おそるおそる言ってみる(汗
何が言いたいかというと、つまり、無理してライブラリを前提にした構成だけではなく、もっと自由に制限かけることない発想を心がけたいということである。その後に、効率化できる部分はライブラリを利用し、そうでない部分は、自分で作るのが大事なのかなと。
こんなサンプルを作ってみた。
サンプル
Flash Player Plug-in はこちらからダウンロードする事が出来ます(無料)。
↑
これは、まったくライブラリを利用せずに作ったサンプル。マトリックスでオブジェクトを回転させるモーション。ついでブラーなんぞもかけてみる。
特に大きな理由もないんだけども、ちょっと作りたくなって作ったもの。便利な世の中に、ちょっとレトロな雰囲気を求めるという欲求に近いのかな?
ソース
package {
//クラス
import flash.display.Stage;
import flash.display.StageScaleMode;
import flash.display.StageAlign;
import flash.display.Sprite;
import flash.filters.BlurFilter;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.geom.Matrix;
//コンストラクタ
public class Main extends Sprite {
//オブジェクト
private var TI:Timer;
private var SP:Sprite;
private var BF:BlurFilter = new BlurFilter();
//モーション設定
private var F:uint = 30; //総フレーム数
private var beforeR:uint = 90; //初期角度
private var afterR:uint = 270; //最終角度
private var EF:uint = 3; //イージングの強さ
private var flag:Boolean = false; //表裏フラグ
//モーション変数
private var n:uint;
private var R:Number;
//コンストラクタ
public function Main() {
//ステージ設定
stage.showDefaultContextMenu = false;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
//スプライト生成
SP = new Sprite();
SP.graphics.beginFill(0xFF9900);
SP.graphics.drawRect(-100, -50, 200, 100);
SP.graphics.endFill();
SP.x = 300;
SP.y = 75;
addChild(SP);
//タイマー開始
setTimer();
}
//タイマー処理
private function setTimer():void {
TI = new Timer(1000, 1);
TI.addEventListener(TimerEvent.TIMER, compTI);
TI.start();
}
//初期設定
private function compTI(e:Event):void {
n = 0;
SP.addEventListener(Event.ENTER_FRAME, enterFrameListener);
}
//モーション処理
private function enterFrameListener(e:Event):void {
//フレーム数追加
n++;
//角度計算
R = dvInOut(n, F, beforeR, afterR-beforeR, EF);
//マトリック処理
var a:Number = Math.sin(R*Math.PI/180)*-1;
var b:Number = Math.cos(R*Math.PI/180)*0.5;
var myMatrix:Matrix = new Matrix(a, b, 0, 1, SP.x, SP.y);
SP.transform.matrix = myMatrix;
//ブラー処理
BF.blurX=Math.floor(-Math.cos(R*Math.PI/180)/2*30);
BF.blurY=0;
BF.quality = 3;
SP.filters = new Array(BF);
//モーションの中間処理
if (n==F/2) {
flag=!flag;
SP.alpha=(flag) ? 0.5:1;
}
//モーション完了処理
if (n>=F) {
SP.removeEventListener(Event.ENTER_FRAME, enterFrameListener);
setTimer();
}
}
//イージング処理(遅く→早く→遅く)
private function dvInOut(i, F, b, c, E2):Number {
return (i<=(F /= 2)) ? b+c/2*Math.pow(i/F, E2) : b+c-c/2*Math.pow(2-i/F, E2);
}
}
}
ポイントとしては、
//イージング処理(遅く→早く→遅く)
private function dvInOut(i, F, b, c, E2):Number {
return (i<=(F /= 2)) ? b+c/2*Math.pow(i/F, E2) : b+c-c/2*Math.pow(2-i/F, E2);
}
このイージング処理の部分。
当然ながら、Tweener の caurina.transitions.Equations クラスの中に、イージング関連の計算式が記述されている。
でも Tweener の計算式とはちょっと異なるはず。
なんか何が言いたいのか良く分からなくなってきたけども、ライブラリは利用する部分も当然あるし、ソースを見て勉強できるという部分もある。
ライブラリを使う方が逆に面倒で処理が重くなるケースも無いことは無いだろう。そんな時に、自身できちんと効率の良いキレイなソースを書くことができるようになりたいな、っていう話。
まぁ、そんなことを言い放しつつ、結論としては、まぁ普通にライブラリはどんどん利用していくよ、的な本末転倒な感じではあるけども…orz
- 次の記事: [デバッグテクニック] オブジェクトをダンプして効率化!
- 前の記事: Flash Player 10 リリース
コメント:0
トラックバック:0
- この記事のトラックバックURL
- http://god.xsrv.jp/__mt/mt-tb.cgi/1330
- トラックバックを受ける記事
- ライブラリなんかに頼らない!!(う・そ) from 1ka2ka.com