« 2007年07月 | メイン | 2007年09月 »

2007年08月27日

ブログパーツ TwitterConsole を作った

3年前に作った遺産、ダイアリーマトリックスを何かに使えないかと思ってTwitterのログを流し込んでみたらカオスなことになったので、せっかくだからブログパーツにしました。








そのまんまだとアレなので、papervision3dでパースかけてみたり色んな意味で実験作。
Twitterの発言って横文字がどうしても多くなるので縦スクロールを省いた結果、ニコニコ動画っぽくなったのをパースをかけてごまかしたという説もあります。
単調にならないよう角度をある程度ランダムに振っていますが、ステージの四隅に欠けが出ないようにしつつビットマップのサイズを抑えるのがめちゃくちゃ苦労したという裏話も。

デバイスフォントをビットマップ化したりフェードアウト仕込んだりパースかけたりでめちゃくちゃ重くなってるので、このままじゃちょっと配布するのは忍びないかなといったところです。
もう少し軽くできるとは思うので、最適化が終わったら正式に配布しまっす。

2007年08月26日

外部BMPファイルを読み込むためのデコーダクラス作った

外部BMPファイルをFlashPlayerで表示するためのデコーダクラス BMPDecoder を作成しました。
RLE圧縮にも対応。

Spark projectSnippetsにコミットしました。
怪しいところがあればいくらでもご報告ください。

 
当初は BMPLoader として読み込みから表示までサポートするクラスとして作ろうと考えていたのですが、Loader を拡張すると load をオーバーロードできない、URLLoader を拡張するとインスタンスを直接子として配置できない、しょうがないから Sprite を拡張しようとしたらデコードしたビットマップデータをわざわざ子として配置するために Bitmap インスタンスまで持たなきゃいけなくなる。
じゃあもう Bitmap を拡張すればいいじゃないか。

……読み込みから表示まで行うクラスのベースクラスが Bitmap ってなんだか気持ちが悪い。

自分が使う分にはいいのですが、オープンソースプロジェクトにコミットするにあたってどうもこの気持ち悪さが拭えなかったので、デコーダだけでいいかなと。
こんなクラス使う人はそもそもこなれてるはずだから、読み込みから全部サポートしなくてもいいかなと。
データの読み込み後、すぐにデコードを行うかどうかも使う人に任せられるのできっとこの方がいいかなと。

 
最終的には拡張子を気にすることなく読み込みを行う ImageLoader クラスといった感じで作り込めれば最強なんですが、どれだけ対応しなきゃならないんだと。
こういうのは複数人で開発した方がよさそうですね。

関連エントリ:
PSDParser リリース
アイコンファイルのデコーダクラス作った

2007年08月24日

SCRAP AND BUILD

今まで作ってきた小ネタとかMXPとかそろそろアーカイブとしてまとめないと、エントリに分散されてる状況が激しくもったいないというか、やっぱこれがブログの弱点だよなあとしみじみ。
近い内に一覧化できるページを作ろうと考えています。

それに先駆けて、今から2年ほど前に書いていたブログで公開していた作品も一旦引き上げるか何かしてまとめたいと思います。
ブログ自体はもう更新はしないとは思いますが、せっかくFLASHでバカなことやってるのでこのままにするか移植するか考え中。

廃墟ブログ:二匹狼の遠吠え


当時の作品をまざまざと見返してみて、かまいたちの夜カメラなんかは ustream で使えたらめちゃくちゃ面白そうなんだけど送信前に弄れないからアウトー
一度処理してブラウザに表示されたものを別カメラで写すのもなんだかなあ。
でもせっかくだから今度やってみようっと。

DOTS EDITORは今となっては微妙なツールに成り下がり。
ピンの種類がたくさん出てるせいで、押さえようにもパレットがものすごいことになりそう。
なんとなく種類が少なかった頃の方が活気があった気がするのは、制限された環境の中でこそ真価を発揮する日本人の特性かもしれない。

びっくりしたのがIPドット絵共有キャンバスがまだ稼動してること。
これって月の初めにキャンバス初期化してるんだけど、ログ見てたら2年間に渡って地味に使われてる!
もったいないことした!
これ使ってなにかやろう!

 
 
よくよく考えたら mixi にしか書いてなかったんですが、先日退職&独立しました。
5年間ただがむしゃらにモノを作っていたら会社とともに成長していた、というと変な言い方ですがほんと他の会社にいたら到底できないような貴重な経験が今の自分を支えていることを思うと感謝しても足りないくらいです。

そんなわけでこれからの出会いをひとつひとつ大切にしていきたいと思います。
Twitterではいろんな人とやりとりはしているものの実際にまだ会ったことのない人が多くて、勉強会などでは刺激の嵐。
自分は誰かに刺激を与えることができているのかな、なんて思ったり思わなかったり。
とにかく、いろんな人のところへ遊びに行ってみたい。


それから一緒にFLASHゲーム作ってみたいなんて人がいたら是非声をかけていただければと。
マルチユーザゲームならなおよし。
ベタな対戦ゲームもいいけど、場がカオスになるようなものの方が好みです!

なんかgdgdなのでここらで締め。

2007年08月21日

シンボルをボタン一発で環状に整列する

先日公開した整列拡張MXP「AlignAssist」に、選択したシンボル群を一発で環状(円形)に整列する機能を追加しました。
残念ながら FlashCS3 対応です。
ナウローディングのアニメシンボル作成などに使えるんじゃないでしょうか。

AlignAssist


整列の中心座標と半径、オフセット角度を指定できます。
アンドゥ時に変形点がズレる現象が起こりますが、きっとJSFLの仕様。。。


たとえばこれが

ボタン一発でこうなります

回転もつけられます

2007年08月16日

フィルタ拡張機能 TraceFilter を作ってみた

FlashのIDEで設定したフィルタを ActionScript で処理したくなった時に、わざわざパラメータを確認しながらコードを書くのが煩わしいので、ボタン一発でコードを生成する拡張を作りました。

TraceFilter

Flash8対応です。
デフォルト引数によって記述が省略するかどうかを選択可能にしてあります。

なお、カラー調整フィルタ(ColorMatrixFilter)については自前計算のため、フィルタに渡す matrix の値が誤差の範囲内ですが若干ズレます。


そして驚愕の事実。
コントラストのスライダーの値と matrix の値の相関がひどすぎる。
正と負で全く違う上、折れ線グラフかいてみたらガタガタグラフw
しょうがないので -100 から 100 までのコントラスト値に応じた matrix のパラメータを全てハードコーディングしましたw
というか、パブリッシュ時にどういう処理してるんだこれは・・・


グラデーション拡張でもパラメータの出力機能をおまけで付けてみましたが、他にもシンボルの変形マトリックスなど ActionScript として出力できたら便利そうなものがまだまだあるので、そのうち出力系としてひとつにまとめてみたいと思います。

2007年08月13日

FlashCS3のPNG書き出しバグ?

こないだ出くわしたバグっぽい現象。
自分だけの現象なのか FlashCS3 のバグなのかよく分からず、他の人にも検証してもらいたいので手順を書き下してみます。


まず、FlashCS3 に PNG な画像ファイルを読み込み、そのままステージに配置します。
なんだかこの時点で不自然に画像が拡大されている気がするので情報&変形パネルを見てみると、100%と表示されているにも関わらず縦横サイズが大きくなっています。
ライブラリから画像のプロパティを見ると何故か正しいサイズ情報が表示されていますが、仕方がないので元のサイズに縮小して配置しました(仮に75%とします)

書き出してみると、ステージに配置したサイズで表示されました。
これなら別段、問題はないようです。

一応他のファイルでも再現性があるか調べていたら、特に何も起こらないファイルがあったり、逆に縮小されてしまうファイルもあったり。
条件が全く分かりません。

 
ところでここからが本題。
サイズがおかしくなった画像をスクリプトから弄ってみたいなと思い、クラスを割り当てることにしました。
基本クラスは flash.display.BitmapData でクラスは適当に Hoge とか付けてみましたが、asファイルを用意していないので定義がSWF書き出し時に自動生成されますとか言われました。
問題ないのでそのようにしておきます。

そうこうしてる内に画像を弄るスクリプトができたので書き出してみました。
・・・あれぇー?
ステージに配置していた画像が縮んでないかい?
計算してみたら、プロパティに表示されていた正しいサイズの75%になってるよ。

意味不明に拡大されてたから縮小したのに、クラス割り当てたらそれが解消されて縮小だけしっかり残ってやがんの。
それはないわー

2007年08月06日

ニコニコ動画にギャラリーモードがあったらいいな

第一弾に引き続き、ニコニコ動画を見ていてこんなのあったらいいなシリーズ第二弾。

動画を今まさに閲覧中のユーザがどのあたりを見ているのか一目で分かるニコニコギャラリー。イメージはこんな感じってことでFlashでサンプル作ってみた。







完全にリアルタイムではないけれど半同期的にコメントデータを受け取ってるようなので、再生しながらコメント書いたと仮定してその時刻とタイミングからおおよその現在位置を割り出せるはず。
XMLソケットの切断がちゃんと検出できないとカオスになりかねないので、メッセージサーバの負荷を考慮すると・・・コメント書いてないユーザはいないものとして扱い、積極的に盛り上げてるユーザを表示するだけでも実現できるかなと。

無数に飛び交うコメントのほとんどがリアルタイムではないのだけれど、人気動画なら確実に誰かが画面の向こうで同じ動画を見ている。
そんなちょっとしたリアリティというか「本当にそこにいる感」を出せたら、臨場感とはまた違った意味で面白いんじゃないかと思う。
今のニコ動と実況板のちょうど中間あたりかな。

みんな同じシーンばかり繰り返してコメントしてるのが気になってしまうとか、何故か途中で抜けていく人が多いとか、ずっとエンドレスで見ている人がいるとか、そういった画面の向こう側にいる人をちょっと観察できちゃう魅力。

 
本家に実装はされないだろうし、かといって自前で表示する別サイトみたいなのを作る気も起こらなかったのでアイデアだけ垂れ流し。
誰かエロい人、実際にデータ取ってきて作ってくれないかな。

2007年08月05日

ニコニコ動画にコメント分布グラフがあったらいいな

ニコニコ動画を見ていて、こんなのあったらいいなシリーズ第一弾。

動画に対するコメント分布が一目で分かるニコニコグラフ。
イメージはこんな感じってことでFlashでサンプル作ってみた。







弾幕への心構えができるので直前でコメントカットすることもできるし、中だるみしているかどうかもばっちり分かる。
サンプルでは単純にコメント数分布にしてあるけど、コメントが画面を占める面積率なんかでもいいかもしれない。
解析に時間かかりそうだけどas3なら大したことなさそうだし。

 
中盤でいきなりグラフが振り切ってるのとか実際に見るとワクワクしたり早送りしたり、なんか色々とユーザの行動に影響を与えそうだ。
ポジティブコメントとネガティブコメントを識別できれば最強だなあ。


本家に実装はされないだろうし、かといって自前で表示する別サイトみたいなのを作る気も起こらなかったのでアイデアだけ垂れ流し。
誰かエロい人、実際にデータ取ってきて作ってくれないかな。

整列拡張機能 AlignAssist を作ってみた

Flashで作業していて、整列パネルで並べなおす時に数値指定できたらいいなと思ったので勢いで作ってみた。

AlignAssist

FlashMX2004対応、使用方法は見たままです。
入力した数値に従って分布整列やスペース整列が可能となります。

ひとつ気になるのがJSFLによるシンボルの再配置や選択といった処理は1回につき1命令としてカウントされてしまうため、アンドゥ1発で元の状態に戻せないところです。
JSFLで行った処理をひとつひとつさかのぼってしまうのは今のところ避けられないので、試行錯誤するにはちょっと向いていないのかも。

2007年08月01日

LoadVarsとデータフォーマット

FlashでLoadVars+json.asを使ってJSONを読む時の注意を読んで、補足というか自分なりのまとめを書いておきたいと思います。

Flash で csv 読もうとして一度はぶち当たる壁なんですが、自前でパースが必要なデータを読み込む場合は必ず onData で処理する必要があります。
これって LoadVars に限らず XML でも同じで、自前でパースしたければ XML.onData で処理しなきゃなりません。
ただしそうすると onLoad が呼ばれなくなるので、onData の末尾で this.load( true ); と呼んであげます。

「あれ、本来 onLoad でやってた処理を onData に書けばいいんじゃないの?」

と思う人もいるかもしれませんが、onLoad を残しておくとパースに失敗した時に this.load( false ); を呼べばエラー処理を任せられるので、エラーチェックが多岐に渡る場合も想定して常日頃からそうしておいた方が無難です。

 
ところで as3 では URLLoader.dataFormat プロパティを用いて読み込んだデータの制御方法を指定できます。
指定できるのは以下の3種類

 URLLoaderDataFormat.TEXT : テキストとして
 URLLoaderDataFormat.BINARY : 生のバイナリデータとして
 URLLoaderDataFormat.VARIABLES : URLエンコードされた変数として

デフォルトでは URLLoaderDataFormat.TEXT が指定されているので、onData で処理するのと同じ状況になります。
as3に移行したばかりの人は逆にここでつまづきやすいので要注意です。
自動的にパースされた状態で受け取りたいなら、いちいち URLLoaderDataFormat.VARIABLES を指定しなきゃいけませんが、面倒なので TextLoader、BinaryLoader、VarsLoader といった拡張クラスを作ってしまうのもありです。

 
もうひとつ注意点として、CGIから返ってきたデータが「&a=1&b=2」といった感じで先頭に&がついていても LoadVars の自動パースでは無視してくれたんですが、URLLoader だと実行時エラーで怒られます。

 print("&a=%d", $a );
 print("&b=%d", $b );

みたいな感じで出力を列挙しちゃってると陥りやすい罠。

 
as3の汎用クラスとか裏技的なTipsも嬉しいけど、何よりもこういったエラーケースを共有しあうのが一番いいんじゃないかなと思い始めてきました。

あわせて読みたい