FlashCS3の書き出し設定のところに「ステージのインスタンスを自動宣言する」というチェックボックスがあります。

本来なら、Flaファイルのシンボル(またはステージに)にActionScriptのカスタムクラスをリンケージした際に、"シンボル内に配置された子のMovieClipのインスタンス名"を対応するクラスのほうにも変数として宣言されていないと、子MCなどをActionScriptで操作することができません。

これを簡易にするために、シンボルやステージに配置されたMovieClipのインスタンスに名前がついていたら自動的に宣言して書き出すように設定できるものです。

ただし、これによってActionScript上では宣言されていないインスタンスとActionScriptで生成したインスタンスが混在し、見通しが悪くなるという状況が生まれます。
作法的に変数名としてみたときに_(アンダーバー)があるなしがちぐはぐになったりとか、Sprite型や派生クラスへの型指定できないとか。

またステージ上のインスタンスの操作をするために、import宣言は自分でやらないといけなかったり非常に中途半端です。

この状態で宣言を入れてみるとどうなるでしょうか。

同名の宣言を記述すると「重複した宣言」としてコンパイルエラーになります。
自動で宣言されたものと、自分で宣言したものが干渉してしまうようです。(宣言のないものだけ補完してくれたらいいのに><)

結論としては、個人的にはどっちもどっちなので、ActionScriptメインの開発であれば文法的にStrictな方がよいと考えました。
やっぱり自動宣言をやめて、明示的に定義をする方向で行きます。
明示する際には、public var で宣言する必要があります。

唯一の難関は「ステージに配置したインスタンス名の手動宣言」が面倒なところなので、これさえどうにかなればと思い、これを自動で洗い出して宣言文を生成するJSFLを書きました。
ステージのインスタンスを自動宣言するへのチェックは必要なくなります。

// ステージ上のインスタンス名をすべて宣言する var doc = fl.getDocumentDOM(); var timeline = doc.getTimeline(); var layers = timeline.layers; var currentFrame = timeline.currentFrame; var vName = "$name"; var tmplates = { shape: "", text : "\t\tpublic var $name:TextField;", instance : "\t\tpublic var $name:MovieClip;" }; fl.trace("\n\t\t//------------------------"); fl.trace("\t\t//DisplayObject"); for( var i in layers ) { var elements = layers[i].frames[currentFrame].elements; for( var i in elements ) { if( elements[i].name.length==0 ) continue; if( tmplates[elements[i].elementType].length > 0 ) { fl.trace( tmplates[elements[i].elementType].split(vName).join(elements[i].name) ); } } } fl.trace("\t\t//------------------------\n");

HTML5飯