« エラーオプションのメモ | メイン | レイアウト指向スクリプティング »

2007年09月05日

[as3] リンケージにクラスを割り当てたときの注意点(2)

先のエントリーに引き続き。

ステージ上に配置したムービークリップのインスタンス名には
シンボル名をそのままインスタンス名に使うことが多々ある。

AS3ではリンケージの設定に「クラス」と「基本クラス」があって、
「クラス」の方には1つのクラスにつき、1つのシンボルにしか割り当てられない。
そのため、CustomButtonクラスのようなものを作って、複数のボタンの「クラス」に
同じクラスを割り当てようとすると、このクラスを継承したサブクラスをボタンの数だけ
用意しなければならなくなる。

そうした無駄にクラスが増えてしまうことを回避するために「基本クラス」を使う。

この「基本クラス」を使うときに僕がハマってしまったのが、「基本クラス」は
そのままクラスを割り当てればいいのだけれど、「クラス」の方はデフォルトでは
シンボル名が入るようになっている。

親切なことに、Flashはパブリッシュ時に、存在しないクラスを勝手に生成してくれるから
そのまま気にせず書き出しても普通は問題ない。
このクラスの定義がクラスパス内に見つからなかったため、
定義は書き出し時に SWF ファイル内に自動生成されます。
って警告されるやつ。

で、これをステージ上に配置して、インスタンス名をシンボル名と同じ名前に設定すると
たちまちコンパイルエラーが出てしまう。

しかも、このコンパイルエラーが曲者で、
1046: 型が見つからないか、コンパイル時定数ではありません。
と出力されるが、はじめはこのエラーが何を指しているのかがメチャクチャ分かりにくい。

実際エラーを起こす原因は、クラス名と同じ名前のインスタンスがステージ上に存在するから。

例えば「startButton」というシンボルを作成して、そこに
クラス : startButton
基本クラス : CustomButton
と設定した場合。(「クラス」にはデフォルトで入力されているシンボル名のまま)

これをステージ上に配置して、当然のようにインスタンス名を「startButton」にする。

この状態で書き出すと上記のようなコンパイルエラーが発生する。

手っ取り早く回避するには「クラス」の定義名を「 シンボル名 + Class 」とかにすることかなあ。

投稿者 michi : 2007年09月05日 00:22

トラックバック

このエントリーのトラックバックURL:
http://blog.seyself.com/system/mt-tb.cgi/110

コメント

コメントしてください




保存しますか?