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

2007年9月 5日

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

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

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

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

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

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

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

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

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

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

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

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

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

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

トラックバック(0)

このブログ記事を参照しているブログ一覧: リンケージにクラスを割り当てたときの注意点(2)

このブログ記事に対するトラックバックURL: http://system.seyself.com/mt-tb.cgi/440

コメントする


画像の中に見える文字を入力してください。

しばらく時間が経過すると、システム内部と表示されている文字内容に食い違いが発生するようなので、
投稿する前にページをリロードすることをお勧めします。
リロードしてもフォームの内容は維持されます。