> メインに読み込んだ状態だと、「am.swf」が動作しません。
動作しないとは意味がよくわかりません。
表示はされるのに,
何か任意の動作をしないということでしょうか?
任意の動作は山ほどありすぎるので(つまりFlashができる動作全てを指すので),
「動作しない」が一体何の動作を示すのかわかりません。
場合によっては思い通りに動かないことも当然出てくるとは思いますが,
その 場合 も多すぎて特定できません。
> 一度swfファイルを読み込み、その読み込んだswfファイルに
> さらにswfファイルを読み込むということはできないのでしょうか?
いくらでもできると思いますよ。
いくらでもと言っても限度はどこかにはあると思いますが,
10や100くらいが限度ではないと思います。
例えば次のようなものを作成してみました。
ある任意のフォルダ
├ main.swf (ステージ500×300px)
└ naka[フォルダ]
├ A.swf (ステージ500×100px)
├ B.swf (ステージ500×100px)
├ C.swf (ステージ500×100px)
├ D.swf (ステージ500×100px)
└ E.swf (ステージ500×100px)
各SWF(FLA)のフレーム1には次のように書いておきます。
--------------------------------------------------
// 幅500px 高さ300px の 「main.swf」 のフレーム1に書くスクリプト
// テキストフィールド 「_txt」 を作成
this.createTextField("_txt", 0, 0, 10, 0, 0);
// 文字に合わせてサイズを変える
_txt.autoSize = true;
// 文字の指定
_txt.text = "main.swf";
// 1フレーム進む時間毎に随時実行
this.onEnterFrame = function() {
// 「_txt」 を右に 10px 移動
_txt._x += 10;
// ステージの右端まで来たら
if (_txt._x>=Stage.width-_txt._width) {
// 右端で固定
_txt._x = Stage.width-_txt._width;
// この this.onEnterFrame を削除
delete this.onEnterFrame;
}
};
// ロード用ムービークリップ 「_mc」 を作成
this.createEmptyMovieClip("_mc", 1);
// y座標を 50 にする
_mc._y = 50;
// 「naka」フォルダの「A.swf」をロード
_mc.loadMovie("naka/A.swf");
--------------------------------------------------
--------------------------------------------------
// 幅500px 高さ100px の 「A.swf」 のフレーム1に書くスクリプト
this.createTextField("_txt", 0, 0, 10, 0, 0);
_txt.autoSize = true;
_txt.text = "A.swf";
this.onEnterFrame = function() {
_txt._x += 10;
if (_txt._x>=Stage.width-_txt._width) {
_txt._x = Stage.width-_txt._width;
delete this.onEnterFrame;
}
};
this.createEmptyMovieClip("_mc", 1);
_mc._y = 50;
_mc.loadMovie("naka/B.swf");
--------------------------------------------------
--------------------------------------------------
// 幅500px 高さ100px の 「B.swf」 のフレーム1に書くスクリプト
this.createTextField("_txt", 0, 0, 10, 0, 0);
_txt.autoSize = true;
_txt.text = "B.swf";
this.onEnterFrame = function() {
_txt._x += 10;
if (_txt._x>=Stage.width-_txt._width) {
_txt._x = Stage.width-_txt._width;
delete this.onEnterFrame;
}
};
this.createEmptyMovieClip("_mc", 1);
_mc._y = 50;
_mc.loadMovie("naka/C.swf");
--------------------------------------------------
--------------------------------------------------
// 幅500px 高さ100px の 「C.swf」 のフレーム1に書くスクリプト
this.createTextField("_txt", 0, 0, 10, 0, 0);
_txt.autoSize = true;
_txt.text = "C.swf";
this.onEnterFrame = function() {
_txt._x += 10;
if (_txt._x>=Stage.width-_txt._width) {
_txt._x = Stage.width-_txt._width;
delete this.onEnterFrame;
}
};
this.createEmptyMovieClip("_mc", 1);
_mc._y = 50;
_mc.loadMovie("naka/D.swf");
--------------------------------------------------
--------------------------------------------------
// 幅500px 高さ100px の 「D.swf」 のフレーム1に書くスクリプト
this.createTextField("_txt", 0, 0, 10, 0, 0);
_txt.autoSize = true;
_txt.text = "D.swf";
this.onEnterFrame = function() {
_txt._x += 10;
if (_txt._x>=Stage.width-_txt._width) {
_txt._x = Stage.width-_txt._width;
delete this.onEnterFrame;
}
};
this.createEmptyMovieClip("_mc", 1);
_mc._y = 50;
_mc.loadMovie("naka/E.swf");
--------------------------------------------------
--------------------------------------------------
// 幅500px 高さ100px の 「E.swf」 のフレーム1に書くスクリプト
this.createTextField("_txt", 0, 0, 10, 0, 0);
_txt.autoSize = true;
_txt.text = "E.swf";
this.onEnterFrame = function() {
_txt._x += 10;
if (_txt._x>=Stage.width-_txt._width) {
_txt._x = Stage.width-_txt._width;
delete this.onEnterFrame;
}
};
--------------------------------------------------
「A.swf」~「E.swf」を作成しておいて,
「main.swf」を作成して,表示してみると,
ちゃんと「E.swf」まで表示されますし,動作もします。
「main.swf」を開いてすべてのロードが完了したとき,
階層構造は次のようになるということです。
main.swfの_root
└_mc(naka/A.swf をロード)
└_mc(naka/B.swf をロード)
└_mc(naka/C.swf をロード)
└_mc(naka/D.swf をロード)
└_mc(naka/E.swf をロード)
このくらいは問題ありません。
まだまだ まだまだ 行けるはずです。
※おそらく,
ムービークリップの階層作成限界数と同じ数だけ
子・孫・曾孫…ロードできると思います。
または,
loadMovie の数に 16000 の限界があるようですから,
こちらの限界が先に来るのかもしれません。
一度 Macromedia(今はAdobeですが)に,
作成できる階層の限界数を問いあわせたことがあるのですが
無解答でした。
ですから限界は知りません。
お礼
大変丁寧に教えていただきありがとうございます! できました! 色々とスクリプトが間違っていたようです。 でも勉強になりました。ありがとうございました。