AIRやFLASHなどを表示するのに不便なので、ブログから自作サイトに移転します。 『N2-Works移転先 』 今後はこちらで更新を行っていきます。 C/C++ではアロケートはmalloc(calloc,realloc)/free、GlobalAlloc/GlobalFree、new/deleteなどで自分で操作する必要がありました。
PHP/Perl/Java/C#などでは問答無用でスコープから抜けた瞬間にガーベッジコレクションされます。
ではActionScript3.0ではというと次のような仕様となっていることが分かりました。
以下はaquy blogさんの記事『AS3.0 GC(ガベージコレクタ)についてのメモ
』からの引用です。
C/C++なら子から順に解放するのは当たり前の仕様なんですが、ガーベッジコレクタ実装をうたうのなら親を解放した時には、参照されているアロケート領域全てを順に解放して欲しいものですね…。 イベントリスナの解放が怪しいので、またソースを見直さないといけませんね(泣) |
AIRやFLASHなどを表示するのに不便なので、ブログから自作サイトに移転します。 『N2-Works移転先 』 今後はこちらで更新を行っていきます。 AIRやFLASHなどを表示するのに不便なので、ブログから自作サイトに移転します。 『N2-Works移転先 』 今後はこちらで更新を行っていきます。 Loaderを使用したSWFデータの取得において、widthやheightなどの定義場所が分かりにくいのでメモ。
今回はAVM1Movieではなく、Flash CS4でFlash Player9用でActionScript3.0用でPublishしたAVM2MovieなのでMovieClipにキャストしています。
以下コードです。
とりあえずはMovieClipのloaderInfoの中に値は格納されているみたいです。MovieClipもBitmapもDisplayObjectからの継承なので違いはないと思うのですが、なぜMovieClipの場合はloaderInfoの中でしか定義してくれないのでしょうか?
じゃあ自分でwidthに挿入しようと思い、
などとするとMovieClipが表示されなくなりました。どうやらMovieClipは直接widthの値を直接入力して大きさを変更することはできないようです。 mc.scaleXは値が格納されていて、新たに数値を挿入すると反映されますので、大きさを変えたい時はこちらを使用しろということなのでしょう。 |
AIRやFLASHなどを表示するのに不便なので、ブログから自作サイトに移転します。 『N2-Works移転先 』 今後はこちらで更新を行っていきます。 AVM1Movieクラスが本当に単純なSWFの実行しかできないのが分かり、ノベルゲームエンジンに実装するには厳しいことが分かりました。
そんなわけでActionScript3.0環境でもMovieClipクラスへキャストできるように、オーサリングツールを「Flash CS4」に変更することにしました(といっても体験版ですが)。
早速、Flash8で作成したロゴSWFを移植することにしたのですが、Flash8で作成したSWFは当然ActionScript2.0なので3.0に書き換えないといけません。
ところが文法を3.0に書き直しても発生するエラーがあります。
メインタイムラインのフレームアクションで定義している自作クラスのインスタンスが、MovieClipシンボル内のタイムラインから参照できないのです。
色々調べてみると、どうもコンパイラがStrictモードになっているのが原因らしいです。 こちらのサイトでその原因が詳細に書かれていました。 「rootプロパティでメインタイムラインの関数にアクセスできない 」 by FumioNonaka.comさん 要するにエラー発生時期をSyntaxエラーを発生させるかRuntimeエラーで発生させるかの違いということです。 Strictモードでは実行時に解決できるかもしれないという書き方では、エラーになるということですね。 というわけで無事解決したので、メモっておきます。 |