昨日、Scaleformのセミナーにいった話は既にしましたが、全然本題に関係ないところですごい気になった事があった。
セミナー恒例のアンケートにFlashDevelopがあったのだ。一瞬我が目を疑いましたよ。ひょっとして誤植か? とすら思った。 未だに見間違いだったのではないかと思うんだけど、多分間違いではない。(もしかして間違いだったらすいません)
具体的には、「お使いの製品はなんですか?」という旨の質問があって、FlashCS4,FlexBuilder,Photoshop,,,と選択肢が続く。その中にあるんですよ「FlashDevelop」の名前が。
いままでこんな事は無かったはずだ。
これはですね、キョーレツにAdobeがFlashDevelopを意識しているのではないかと。いや、そうに違いない。FlashDevelop3.0のRCがとれてリリースされるときはAdobeの名前を冠してるかもしれないなあ。
やはり作るべきはツルハシかジーパンなのだろうか。
ScaleformGFxに行ってきたよ。Flashの人とゲームの人の参加割合はよくわからなかったけど、勝手な印象だと半々ってところなのかな?とりあえず普段なじみの無いゲーム業界の実情とかも垣間見れて、技術的な話よりそっちに興味が向いた感じでした。
おそらく参加したFlasher達も興味があったのはゲーム業界への参入とか市場拡大への関心ではなかったかと。そういう意味で3Dがどうとか、マッピングがどう、っていう話はあまり重要では無かったかもしれない。逆にゲーム業界の人に取ってはこの部分が重要だったのかも。ま、あくまでも個人的な感想にすぎないけどね。
質疑応答で
FlashやってるクリエイターがFlash技術でゲーム業界の案件に参加できるのか?またそういった前例とか、体制はあるのか?
という問いに対して、Scaleformの社長さんは
Flasherがゲーム業界に転職するというのはあり得るけど、すぐにScaleformの案件があるかどうかは分らない
或はゲームパブリッシャーやゲームデベロッパーなどの企業に企画を持ち込む、というのもありかも
見たいな回答でした。
僕の印象では質問の意図がうまく伝わっていない感じだったけど(そもそもScaleformという企業が考える問題ではなく、どちかっていうとAdobeの課題だと思う)、少なくとも
僕が今やってるブログパーツやバナー、Flashサイトなどの受注・制作をやりつつ、スクエア・エニックスから某格ゲーのライフインジケーターとか、某RPGのマップを作る、みたいなのはなさそう。(ScaleformならFlashでここら辺のモジュールが作れるみたいです)そもそも現時点では想定すらされていない感じだった。
そんなわけでFlasherがwebの仕事と平行してゲームの仕事をするってのはまだまだ先の話だ。
それともう一つ。ScaleformによってゲームをFlashだけで作る事も可能ですが(実事例でみたゲームはまさにこれ)本格的な格ゲーの3D処理とかはC++でやるみたい。今のところFlashの出番はちょっとした小物パーツとか設定画面みたいなところがメインって感じ。
いろいろ可能性は感じられたけど、色々と難しいな〜って感じた夜でした。
モックアップで試したので自分用メモ。
MacOSX Firefox/Safari でしか動作を確認していないので動かな環境があるかも。(コメントで指摘していただけるとウレシイっす)
Flash
一応LighBoxとSWFで相互に関数を呼び合っているので、LightBoxが閉じたときも何かしらのアクションを起こせます。
SWFからはExternalInterfaceでコール。navigateToURLでも呼べたりするけど、そうするとマルチバイト文字とか送れないので正統に書きました。
ExternalInterface.call("lightBoxInit",image,title);
LIghtBoxからのcallbackはendメソッドの中に"closeLightBox"とか適当な関数を書いて、ExternalInterfaceに渡していますにしています。直接ExternalInterfaceにendメソッドを渡せる方がLightBox.jsを修正しないで済むしエレガントだと思うんだけど、
ExternalInterface.addCallback("Lightbox.prototype.end", closeLightBox);
だと動かなかったので断念。おしえてエロいひと。
ソースはご自由にどうぞ
参考:
http://www.anthonytanaka.com/?p=180
Today, I add a few files which is ASound samples.
ASound is Actionscript sound library, using dynamic sound generation.
Simple Sine Oscillator .
ASound/branches/gamiken/src/example/example.fla
Lesson | .as file
Simple Delay Effects .
ASound/branches/gamiken/src/example/example2.fla
Lesson | .as file
Effects, Envelop, and mult-Oscillator .
ASound/branches/gamiken/src/example/example3.fla
Lesson | .as file
please check out repository.
http://www.libspark.org/svn/as3/ASound
usage
I would like to talk about ASound APIs. but I want to rebuild, and will change some APIs.
so, I can not talk that.
ASound is unripe library. But, be sure to make complete.
Please wait for a while.

FlashCS4のタブ切り替えが遂に判明したので発表します。
おそらくこの事実に気づいているのはFlash屋の中でも極一部のはずだが、オープンソースマインドに従って公開する事にしました。
ってわけでショートカット。
「Cmd + @」
及び
「Cmd + Shift + @」
前者だと「左→右」後者だと「右→左」と切り替わります。チョー便利。windowsだとCmdをCtrlにすれば良いんじゃないかとおもいます。
Windowsだとプラグインスイッチャーという便利ツールがあったけどMacだとよくわかんなかったので手動でやってみたメモ。本来ならAdobeのアンインストーラーを使うのが適当なんだろうけどなぜか失敗。一応手動でもなんとかなったよ。
(MacOSX Leopardでの作業です)
Step1.ブラウザのプラグインを削除
/Library/Internet Plug-Ins/Flash Player Enabler.plugin
/Library/Internet Plug-Ins/Flash Player.plugin
/Library/Internet Plug-Ins/flashplayer.xpt
参考:http://bowz.info/677
Step2.FlashPlayerをDL
http://www.adobe.com/jp/support/kb/ts/228/ts_228683_ja-jp.html
Step3.インストール
任意のプレイヤーを選択し、ダイアログに従えば完了。
と思いきやここで大きな罠が。
FP9r159以降では、以前に入っていたプレイヤーをどっかで取得しているらしく、「既に新しいプレイヤーが入ってるよ」的なことを言って、インストールさせてくれない。とりあえずFP9r45とかならインストールできた。
オマケ。
おそらくstep1のファイルを差し替えるだけでplayerのバージョンを変更できるんじゃないかと思う。そういうアプリがあれば便利かも。
なんだかえらく間が開いちゃったけど、ASoundのプロパティの続きを書くことにした。
前回、Envelop、Filter、Effects、そしてMasterについて言及しますと宣言していたけど、Max/MSPのベンキョを進めているうちに、設計変更したくなったのでペンディング。今回はMasterについてのみ言及します。
masterプロパティがASoundの目玉なのは前回でも触れたが、まさしくマスターピース。これに関しては基本的に設計変更はない予定。ではいったいどういった設計かと言うとDisplayObjectにおけるstageプロパティを思い浮かべてもらうと分りやすい。
var ins:Instrument = new Instrument();
ins.master;
ins.master.volume = 1;
var sprite:Sprite = new Sprite();
sprite.stage;
sprite.stage.scaleX = 1;
という感じで、stage.scaleX
を変更すると全体の横幅が変更されるように、master.volume を変更すると全体の音量(つまりマスターボリューム)が変更される。
さらにstageがswf上、完全に単一の存在であるようにmasterも単一の存在。外部からswfをロードした場合も同一のmasterを参照する。所謂シングルトンクラスというわけ。
で、ここからがポイント。
ASoundではMasterクラスのみが、Soundインスタンスを保持し、実際にバイナリデータをSoundインスタンスに書き込む。Instrumentクラスや、SinOSCなどのオシレーター系クラスはサンプリングデータを保持するだけで直接Soundインスタンスを扱いはしない。実質的に、MasterクラスはDAC(デジタルアナログコンバーター)として機能している。
POPFORGEでは、バッファー毎にnew Sound()をおこなうSoundFactory方式が採用されていたが(これはFP9をハックする上でそうせざるを得なかった訳だけど)、ASoundではmasterが生成され、swfが終了するまで、単一のSoundインスタンスにバッファを書き込んでゆく。どちらの方式が優れているかは一概に言えないが、個人的には前者はSEやシーケンサー等に向いていて、後者はDSPとかインスタレーションに向いているんじゃないかと思う。
また、ASoundの単一Sound方式だと、アタックのタイミング(音が成るタイミング)をバッファーベースで設定できるので遅延がほぼ発生しない。これをEnterFrameやTimerEventで行うと、フレーム落ちやらで遅延が生じる。fpsに依存しない時間管理ができるので、個人的にはとてもうれしい。(ひょっとすると音響以外の部分でもなにかしらの役に立つんじゃないかな)
気になるメモリ効率だけど、これはSampleDataEvent毎に解放される。なので、メモリリークの心配はない。また、n個のサイン波を鳴らす場合をSoundFactory方式と単一Sound方式で比較してみたところ20個が分水領となり、20以下だと前者が有利で、20以上は後者が有利となった。(CPUの負荷を観測)
とまあ、そんな感じ。
そしてオマケ。
masterがstageと同じく単一の存在なので、ロードしたサブswfからもmasterは同一になる。という事は元swfとロードswfでタイミングの同期が簡単にとれる。つまり任意のタイミングでswfをロードしても、必ず意図したタイミングで鳴らすことができる。ここら辺をうまくやってライブコーディングが面白くなればな〜と思う。
こちらとこちらで告知済みですが、締め切りが少々延びました。
詳細は上記のサイトでご確認していただけます。
そんな訳で、G.W.はjsfl三昧ですね。