_ CS2 は Vista 対応がいまいちなんですが、とりあえず使えなくはない のでいいかーってことで、Illustrator と PhotoShop は保留して、 更新は Flash と AfterEffect のみに。
_ Flash は、ついに Adobe インターフェースに統合完了+新機能満載という話なので、 Flash MX Basic(パッケージ) → CS3(TLP) とアップグレード。 AE はだいぶ前に必要になりそうってことで入手したけど、全然使ってなかったのですが、 やっぱ勉強しなおしてみるかってことで、5.5(TLP) → CS3(TLP) とアップグレード。
_ さて、CS4 でてるのに CS3 にあげてるのはなんで? と思われた方に解説。 新世代発表後の特例というのがありまして、このタイミングで CS3を買うと CS4 へは ライセンス自動無償アップグレードな上、メディアも Win/Mac 両方をただでくれるのでした。 CS4 発表によって CS3 のライセンス料金は下がるのもあって微妙にお得。 ただ、ライセンス手続きだとたぶん先週いっぱいが事務処理限界。 某社Nさんの日記で同じような更新話があがってて、ああ、一週間早ければ…と思ったり。 パッケージだと店頭にある分はまだOKのはずです。Adobe が過去3世代まで、 とルール変更したので AE5.5 からの乗り換えはラストチャンスだったのでした。
_ とりあえず諸手続完了して、CS3 のライセンス証書&メディアが届いたところです。 CS4待ちなら、メディア買わなくてもいいはずなんですが、まあ一応^^; CS4 は発売され次第 Adobe から海外便で直接発送されます。
_ TLP は個人でもつかえると幸せな人いるんだろうなぁ。 個人事業主登録して屋号あれば OK らしいとは聞きます。
_ 一部で話題の Adobe Alchemy、 試しにごそごそ。
_ 高機能化・高性能化してる Flash は、 「マルチプラットホームのスクリプトベースのゲームエンジン 」の素地として 優れているとはいえ、AtionScript3 はかなり微妙。もう少し、こう、汎用性を 維持しつつもお手軽度が高いものがほしいんですね。ってことで、squirrel いけるかなーって ことでコンパイルしてみたり。とりあえず文字列ベースで渡してスクリプト実行は動きました。 FlashPlayer のネイティブオブジェクトの呼び出しも実装はしてみたけど これはまだ動作確認はしてません。その前に問題が。
_ 問題その1。環境面。 必要なコマンドを順次呼びしてあたかも本物の gcc であるかのように使える「gcc」 というスクリプトの処理がちょっと微妙。llvm の処理の関係でライブラリが多重化 してるようなのですが、その名前生成処理で "lib" という文字列を強制排除とかしてて、 フォルダ名に libとか入ってるとあわせて消されて誤動作する罠。sqstdlib ではまった。 あと、ちゃんと処理中におこったエラーコードを返せてないようで、make でエラーでても 止まらずに次に流れてしょんぼり。内部を解析して、細かく個別処理する make の テンプレートを自分で起こしてしまったほうがよさそうです。
_ 問題その2。new/delete が実行時エラーを起こすwwwww。C++ 対応できてねー。 ちなみに、squirrel のように、malloc() して その領域に対して new / デストラクタを 手動でよんで free() とかする分には問題ないので、これはグローバルな new/delete を 自分で定義するようにすれば大丈夫な気はします。書き方覚えてなかったのでとりあえず保留。
_ 問題その3。これ本題。 なんと FlashPlayer にはファイル処理のブロッキングの概念が存在しない(たぶん)! AIR 方面の拡張はまだ調べてないです。や、これはとても正しいことではあるんですが困った。 C のライブラリはブロック前提にくんであるものが多いんですねー。 squirrel もその例に漏れずファイルからの読み込み系が壊滅することに。
_ API とにらめっこしてたら、flyield() なるものを発見。曰く、 This method will force the Alchemy state machine to give up it's time slice. Execution will return to the line following this call on the next Alchemy time-slicing timer tick. おお、これがあればいけるじゃーん♪ってことで、URLReader をラッピングして ファイル処理が終わったらフラグを立てるようなクラスをつくって、 C側では while(処理中) { flyield(); } とか書いてみたんだけど、 Flash 側の処理はさっぱり進行せず、そのまま放置すると 15秒後に FlashPlayerに処理とまってんでーと怒られる始末。うーん
_
この動作が後の版で直るのを期待ってとこで保留かな。
AIR はファイル操作機能あるはずなので、それについては後で調べる予定。
あと、embed されてるファイルはブロックなしで直接 ByteArray として扱えるので、
それが名前でひけるような構造がうまくつくれればファイルシステム代わりに使えたり
するかも。その場合、ファイル差し替えのたびに再構築必要なんでちょっとうれしくないけど。
もし他の swf にうめこんだものが簡単にひっぱりだせるなら、素材一覧から自動生成
かけてアーカイバとして使う、ってのはありかもしれず。研究の余地はあり。
_ 時代は AIR。ってことで、ごりごりっと書いてみてなんとか動いたのを 放置しときます。全部ソースつき。要flex3.2+Alchemy。 一応 AIRにした版。俺々証明つき。 あ、内容ですが、squirrel のスクリプトで AIR アプリが書けます。それだけ。 一応 C++ と ActionSript 間のインタラクションの定番は網羅したコードになってると思われますのでご参考までに。 squirrel を使うメリットは・・・・・・コルーチンと eval ぐらい? あとルーズな型(笑)
_ 作成にあたっては Adobe AIRメモ を多いに参考にさせていただきました。良いコンテンツの公開に感謝を。
_ ファイル操作も当然ながら問題なくできましたとさ。 squirrel からの Flash オブジェクト生成、プロパティ参照、メソッド呼び出しあたりも特に問題なく動作。
_ ところで、adl のエラーメッセージはわかりにくすぎると思うんだ・・・・・・。 結局 XML 定義でバージョン番号が不整合だったのが原因なんですがわかんねーよ。 それから、仕様的に ActionScript + Alchemy が困ったちゃんな部分が一つ。 ActionScript側にオブジェクトの解放のトリガの概念が無い・・・・・・。 ってことで、どうやってもメモリリークしちゃうんで、AS → Squirrel のメソッド呼び出しの動的 割り当ては断念。最初につくるグローバルなものはしょうがないので放置。 必要なら呼び返しの構造は全部 AS 側で書いた上で、squirrel から動的に機構ごと オブジェクト生成するか、グローバルメソッドでの呼び返しでなんとかする方針でひとつ
_
性能的にどんなもんかは未知数。他の環境のエンジン整備が完了したらまた手を出すかも。
メールはこちらへ...[わたなべごう (go @(at) denpa .(dot) org)]
この日記は、GNSを使用して作成されています。