SWC書き出しでアセット作るというワークフローを試してみたところ、若干はまったのでメモ。

SWCの書き出しと読み込みはkayacさんの記事を参照ください。
参考:SWC書き出しを有効に使って作業効率アップ:_level0.kayac

で、たとえば、MyMc0ってクラス名でリンケージしたMcを含んだswcファイルを用意したとして、
そのMyMc0を取り出すときの処理で、普通に書くと↓な感じでOK

var myMc0:MyMc0 = new MyMc0();
addChild(myMc0);

ただここで、クラス名を動的に生成したい場合は、getDefinitionByName()使わないとなので、こんな感じ。
これも問題なくOK。

var index:int = 0;
var className:String = "MyMc" + index;
var myClass:Class = getDefinitionByName(className) as Class;
//myMc0はMyMc0として定義
var myMc0:MyMc0 = new myClass();
addChild(myMc0);

で、お次はハマったダメな場合の書き方
↓これはエラーになります。

var index:int = 0;
var className:String = "MyMc" + index;
var myClass:Class = getDefinitionByName(className) as Class;
//myMc0はMovieClipとして定義
var myMc0:MovieClip = new myClass();
addChild(myMc0);

違いは、変数myMc0の型をMyMc0とするか、MovieClipにするか、ということ。
MyMc0なら、エラーにはならないけど、MovieClipにするとエラーになります。

MyMc0の親クラスはMovieClipなんだから、間違いないんじゃね?
と思ってましたが、問題はそこではなく、エラーのコードでは、MyMc0が一度も出てきてない、という事実が問題。
もっと具体的にいうと、「MyMc0に参照が通ってないからMyMc0は使えない」、ということになるんだそうだ。

詳細は以下、

コンパイルする段階で、使われてないクラスは含まないようにして最適化されるからですよん。なので import しただけだと、使ってないとみなされて、コンパイル段階で省かれてしまうんです。
必要なのはクラス名ではなくて、クラスへの参照です。なので、ロジック中にクラス書くと、エラー回避出来るんです。

soundkitchen:Tweet1
soundkitchen:Tweet2

なので、エラーコードを修正例としては、

//MyMc0を明示的に表記することで参照を通して、MyMcを使うよってことをアピール。
MyMc0;
//上の書き方がよくわからなくて気持ち悪いときは、空の変数定義でもOK
var hoge:MyMc0;
var index:int = 0;
var className:String = "MyMc" + index;
var myClass:Class = getDefinitionByName(className) as Class;
//myMc0はMovieClipとして定義
var myMc0:MovieClip = new myClass();
addChild(myMc0);

個人的な感覚としては、 getDefinitionByName()でクラス作って、そのクラスでnewしてるんだから、問題ないんじゃない?と思ってたけど、プログラム的には明示的に参照を通さないとだめらしい。

Twitterのおかげで知識が広がる、嬉しい限り。

ちなみにswcを使いたかったのはFlexBuilderとかFlashDevelop+flexSDKで製作するようにしたかったから。
ムービープレビューが速い速い。