この記事の内容は少し自信ないですけど、
一応いろいろやってたしかめたりしてみました。


Flash独特のものなのかどうか、numChildrenについて。
というかChildren全般について良くわかってなかった部分があったので
少し整理。


root、つまりメインタイムラインに直接描画したり、あるいはaddChildなどで
インスタンスを表示リストにを追加すると、
追加した順番に0,1,2、…と順を付けられ、
最初に追加されたインスタンスが「0」となる。

例として、

メインタイムラインに直接、

○、▲、■の順にインスタンスを追加していくと、

※メインタイムラインに記述

this.numChildren  では「3」が返され、

this.removeChildAt(0)  では、○が消される。




これが、ムービークリップなどの中にインスタンスを入れたときは異なる。

たとえば、
大きく、四角いムービークリップ(mc1とする)の中に、さっきと同じように、
○、▲、■の順にインスタンスを追加する。

ここで、

mc1.numChildren  とすると「4」が返され、

mc1.removeChildAt(0) とすると、○▲■は残し、mc1自身が消えてしまう。

つまり、mc1自身もひとつのChildとしてカウントされており、
mc1、○、▲、■の順に0,1,2,3と番号が付けられている。
「○」インスタンスは、「1」になる。


これを知らないと、たとえばスライドショーなど一つの場所に入れ替わりで写真を表示させたいとき、
うまくremoveChildが使いこなせない。



…と、いう推論です。
あってるのかなー?
①Flashに実行させたい関数をActionScript内に定義。

public function koreda(引数):void{
処理内容;
}








②①をタイムラインに書いたなら、タイムライン内に、
 クラスに書いたなら、そのクラスのコンストラクタにこう書く。

ExternalInterface.addCallback("kiki←任意の関数名",koreda)

※外部クラスに書く場合、import flash.external.*と書いておく。









③パブリッシュする。






④パブリッシュしたHTML内の、sameDomainと書いてあるところを、全てalwaysに書き換える。






⑤JavaScript内にこう書く。

function callASFunction(引数){
document["flashファイル名"].kiki(引数);
}








⑥そしてJavaScriptからcallASFunction(引数)関数を実行すれば、
 koreda関数が実行される。









※ローカルで試す場合、
 FlashPlayerの都合でうまくいかない場合があるが、
 アップロードすればうまくいく。とりあえずアップしてみよう。
TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。


と、言われた時は
文法・論理性は問題ないのですが、

言ってはるとおり、
参照しようとしてるものが存在しない、という時に返されるものです。

とはいっても、定義してないとか順序がおかしいとかならば
普通に実行できてないはずなんで、
このエラーが出てるとき、理由としてよくあるのが

「ロードが完了してないのに、そこにアクセスしようとしてる」

外部xmlファイルがロードできてないのにその文字列にアクセスしようとしたり、
画像ファイルがロードできてないのにその幅を取得しようとしたりするときに発生するのです。

いくら軽いファイルでも、プログラムの実行速度にはロードが追い付かないので、
「存在しない」という結果が出るわけです。

対処法としては、Loaderインスタンスに.COMPLETEのイベントリスナーをつけて、
onLoaded関数の中に処理を書くことです。