ノベルゲームプレーヤーにFlash8で作成したSWFのロゴを表示させようとした時にLoaderクラスのloadBytesメソッドでエラーが出たので解決法をメモ。
現在制作しているノベルゲームエンジンはリソースファイルを外部で連結させる形を取っており、Loaderクラスを用いて、取得したバイナリデータからBitmapインスタンスなどを作成する仕様となっています。
以前のコラム『画像ファイルから動的にBitmapクラスを作成 』でも書いたとおり、画像ファイルの場合は問題なかったのですが、今回SWFをバイナリから取得してAVM1Movieインスタンスを作成する時にエラーが発生しました。
コードは以下の通り。
エラー内容を読むと、「実行コードの中にLoaderクラスでバイナリをロードする許可がないのにロードしようとしている」という例外が発生しているとあります。 ですから実行を許可すればよいので、以下のようにLoaderContextを適用します。
デフォルトではloadBytesの第2引数はnullとなっていますので、許可しない設定となっています。 でもBitmapインスタンスをロードした時は何も言われなかったのですが、何故なんでしょうか? まあ解決したので良しとしましょう。皆様も上記のようなエラーコードが出力された時は参考にして下さい。 |
AIRやFLASHなどを表示するのに不便なので、ブログから自作サイトに移転します。 『N2-Works移転先 』 今後はこちらで更新を行っていきます。 久しぶりにオーサリングツール(Flash8)でN2-Worksのロゴを作成していたのですが、ColorTransformの使い方をすっかり忘れていたのでメモ。
インスタンスの色を変更したい時にTransformとセットで使用します。
ColorTransformの各プロパティの値は以下の式に使用されます。
というわけで、(ARGB)Multiplierに0が設定されているとインスタンスの色を引き継がないので、(ARGB)Offsetに設定したカラーコードが反映されます。 単に色を設定したい場合はこう使用した方が分かりやすいですね。 |
AIRやFLASHなどを表示するのに不便なので、ブログから自作サイトに移転します。 『N2-Works移転先 』 今後はこちらで更新を行っていきます。 表題の通り、今回はActionScript3.0における値渡しと参照渡しについてのお話です。 C/C++はポインタがありますし、PHPやPERLにはリファレンス(参照)が明示的に指定できますので分かりやすいのですが、ActionScriptにはどうやらそういう文法がないようです。 で、調査の結果 ・配列(Array) ・クラス(Class) ・オブジェクト(Object) は参照渡しになるようです。 それ以外は値渡しになります。 では実験してみましょう。
値渡しになっていますね。 ではこうするとどうでしょうか。
配列の場合は参照渡しになっていますね。 では捻ってFunction(関数)ならどうでしょうか。
どうやらFunctionは値渡しですね。 ClassとObjectは皆さんで試して下さい。ちなみに同じ配列なので省略しましたが、ByteArrayも参照渡しでした。 というわけでcloneメソッドは明示的に値渡しをしたい時などに使用すればよさそうですね。この辺りの理解を曖昧にしていると意図しない挙動を起こしそうなので気をつけましょう。 |