Reinit_creative log Reinit_creative log rss

Reinit_creative log

about ActionScript3 and Design memo.

この夏、映画館で見た映画

2010.09.03

この夏、映画を3本見ました。
ToyStory3(吹き替え+3D)
借りぐらしのアリエッティ
踊る大捜査線3

この3作品の中で一番面白くなかったのは、はっきりしていて、踊る大捜査線3です。
テンポの悪さが際立ってます。やっぱり映像は、テンポだね。

おもろくない作品は置いておいて、3作品の中で面白かったのは、はアリエッティ。

スタジオジブリ前作「崖の上のポニョ」も好きでしたが、僕の「好きなジブリらしい作品」ではありませんでした。

僕の「好きなジブリらしい作品」は以下(年代順)ほぼ鉄板どころ(ほぼ宮崎駿監督作品)。
・風の谷のナウシカ
・天空の城ラピュタ
・となりのトトロ
・魔女の宅急便
・紅の豚
・耳をすませば
※耳をすませばと同時上映だった「On Your Mark」もかなり好きです。

アリエッティは上記リストの作品に近いの香りがして、観終わった後、久々にジブリを見たって感じがしました。
テンポもいいし、何より絵が綺麗。
となりのトトロの自然感と、耳をすませばに出てくる井上直久さんのイバラードの世界観がうまく組み合わさっているように思えました。(イバラードは出てきませんが)
ただ、途中で終わった感があるのと(ここから面白くなるぞ的なとこで終了)、


アリエッティの声優:志田未来も良かった。往年の島本須美を思い出しました。
※地味に志田未来と僕の誕生日が一緒。

今後の米村宏昌監督のジブリ作品には注目したいです。

DisplayObjectの配列参照とメモリ

2010.03.22

あるデバッグ中に、なんかメモリが残り続けました。
結局、犯人が配列だったというお話です。


使用済みのインスタンスをガベージコレクションの対象にするために、僕は、以下の項目を実行します。
・イベントを外す(removeEventListenerを実行)
・変数の参照を外す(null代入)
・Bitmapインスタンスの場合、bitmapDataプロパティが存在していたら、開放する(dispose実行)

インスタンスを生成し、使い終わったら上記の項目(イベントは登録していないので、「イベントを外す」は実行していません。)を実行したのが、以下のコード。

package
{
	import flash.display.*;
	import flash.events.Event;
	
	public class Hoge extends Sprite
	{
		private var _arr:Array = [];
		public function Hoge() 
		{
			addEventListener(Event.ENTER_FRAME, _onEnterFrame);
		}

		private function _onEnterFrame(e:Event):void 
		{
			var bmp:Bitmap = new Bitmap(new BitmapData(100, 100));
			//配列_arrにBitmapインスタンスを追加する
			_arr.push(bmp);
			//BitmapDataを開放
			bmp.bitmapData.dispose();
		}
	}
}

このままでは、メモリが増え続けていきます。
以下、メモリが残っていく結果です。

なぜなら、配列_arrの参照が切れていないので、Bitmapインスタンスがメモリに残っているから
以下のコードは、配列_arrに追加したBitmapインスタンスの参照を外しています。

private function _onEnterFrame(e:Event):void 
{
	var bmp:Bitmap = new Bitmap(new BitmapData(100, 100));
	_arr.push(bmp);
	bmp.bitmapData.dispose();
	_arr.splice(0, 1);	//または_arr = [];
}
配列の参照を外すことでガベージコレクションの対象になり、無事にメモリ開放されました。
以下その結果。 ※上記2つのwonderflを走らせると、なぜか、メモリが溜まっていってしまいます。

結果、インスタンスを使い終わったら以下を実行します。(赤字が追加部分)
・イベントを外す(removeEventListenerを実行)
・変数の参照を外す(null代入)+配列の参照がある場合は配列の参照を外す
・Bitmapインスタンスの場合、bitmapDataプロパティが存在していたら、開放する(dispose実行)

Tweenライブラリ模索

2010.03.09

現在、MITライセンスのTweenライブラリを探しています。
僕がFlashを制作する際に使用するTween系ライブラリは、TweenMaxです。
ただ、TweenMaxは、条件付きで有料ライセンスなので、頼りすぎては、今後作業に支障が出るため、できれば、MITライセンスの高機能Tweenライブラリを探していました。


調べて、ある程度検証した結果、BetweenAS3がとても良さそうという結論に至りました。
BetweenAS3が優れている点を自分なりに挙げてみます。

高速である

こちらにBetweenAS3作者のyossyさんの各Tweenライブラリのパフォーマンスデモがアップされています。
デモのソースは見ていませんが、大量のオブジェクトをTweenライブラリで動かす際のパフォーマンスチェックだという事は分かります。
見ると分かりますが、圧倒的にBetweenAS3のパフォーマンスが高いです。フレームレートが落ちません。 

パフォーマンスの秘密は、以下の本に書かれています。

柔軟性が高い

まさに以下の記事の内容です。

xingxx - 直感的かつ再利用性の高いアニメーションライブラリ BetweenAS3
BetweenAS3クラスのインスタンスを生成することができるので、x,yのプロパティは、そのままでfilterを追加したいとか、1行追加するだけで、そのインスタンスを再利用できる点が素晴らしい。コード数も減るので、嬉しいです。


以下は、BetweenAS3の使い方のメモ

Wonderflに載ってるソースを眺めただけで、実際に走らせていないため、使い方が全然わからないため、メモします。

Tweener的な書き方

[Tweener]
Tweener.addTween(mc,{x:100 , time: 1.2 , transition:"easeOutQuart"});

[BetweenAS3]
BetweenAS3.to(mc,{x:100} , 1.2 , Quart.easeOut).play();

コールバック関数の使用

[Tweener]
Tweener.addTween(mc,{x:100 , time: 1.2 , transition:"easeOutQuart" , onComplete:func});

[BetweenAS3]
var t : ITween = BetweenAS3.to(mc,{x:100} , 1.2 , Quart.easeOut);
//インスタンスを生成せずに コールバック関数を設定できないか、未調査。
t.onComplete=func;
t.play();

コールバック関数の種類

・onPlay
・onStop
・onUpdate
・onComplete


随時追記します。

3D勉強中1

2010.03.02

Math

3Dを基本から勉強中なのですが、 アフィン変換が分からなくていきなりつまづきました。

で、アフィン変換を調べていくと、完全に忘却している三角関数の定理がたくさん出てきて、 これは、本格的に復習しようと思いました。

まず躓いたアフィン変換

以下の例は、角度rad回転させた時の座標を求めています。

※x0,y0は、変換前の座標
※x1,y1は、変換後の座標

x1=x0*Math.cos(rad)-y0*Math.sin(rad)
y1=x0*Math.cos(rad)+y0*Math.sin(rad)

まず、この公式が全く理解できず、ググりました。

アフィン変換を解く

アフィン変換

上図は、点Pから点Qへ回転したときの座標を求めます。
まず点Qの座標を(x1,y1)とすると、座標Qは、以下の式で求まります。

x1=Math.cos(a+b);
y1=Math.sin(a+b);
加法定理より
x1=Math.cos(a)*Math.cos(b)-Math.sin(a)*Math.sin(b);
y1=Math.sin(a)*Math.cos(b)+Math.sin(b)*Math.cos(a);
・・・式1

開店前の座標Qを(x0,y0)とすると、座標Pは、以下の式で求まります。

x0=Math.cos(b);
y0=Math.sin(b);
・・・式2

式2を式1に当てはめます。

すると以下の式になり、アフィン変換の公式になります。
x1=x0*Math.cos(a)-y0*Math.sin(a)
y1=x0*Math.sin(a)+y0*Math.cos(a)
次回は、実際のスクリプトに入っていきます。

Googleの拡張機能を入れた

2010.03.01

僕が仕事に現を抜かしている間に、GoogleChromeもver4になり、 いつの間にか拡張機能をインストールできるようになってました(遅すぎ)。 とりあえず、気になったものをインストールしてみました。

AutoPagerize for Chrome

FirefoxのAddonで言うところのAutoPagerize。これは便利。

TwitterBar

投稿のみのできるTwitterツールバー。 How to use TwitterBar

IE Tab

IEでレンダリングしてくれる。

Firebug Lite

Firebugっぽい。

Delicious Tools

Deliciousのブックマークレットを拡張した感じの機能。FirefoxのAddonには敵わない。

Proxy Switchy!

プロキシ切り替え。結構便利。

How to Proxy Switchy!

webページショット - Webpage Screenshot

閲覧サイトのスクリーンショットを撮る。自動保存機能は無し。

個人的な雑感ですが、もう少し、Web開発関係の拡張機能が充実してきたら、メインのブラウザをFirefoxからChromeに乗り換えます。モッサリ感のないChromeでのネットサーフィンは、魅力的です。


いつごろから、サポートブラウザにChromeを加えないといけないのでしょうか。 Mac版も着々と開発が進んでいるようだし、、、、。

My Icon

Flash+デザインを仕事としています。
info[at]reinit.info
>>detail

レコメンド

ActionScript3アニメーション

ActionScriptアニメーション

アニメーションに関する基礎が得られる本。
コレを読んで、ASが楽しくなった。