プロが教えるわが家の防犯対策術!

特定のファイル(※1)を用意した上で、下記のことを行うには、どのような方法をとればよろしいでしょうか。

kiso1.exeを開くことで、kiso1.exeのレイヤー2とレイヤー3にkiso2.swfを読み込み、kiso2.swfのボタンアクションによってnet1.swfを読み込む。net1.swfのボタンアクションによって同じネット上にあるFLASHファイルを読み込み、またそのFLASHファイルのボタンアクションによってnet1.swfを読み込む。これらのファイルの中でkiso.exeの以外のものは、他人に作成させることも考えており、kiso1.exeに読み込ませるFLASHファイルのファイル名のみkiso2.swfと同じにすれば、kiso2.swfの設定(loadMovieのURLを変えるなど)によって読み込むFLASHファイルが管理外のネット上にあっても同様のことが行えるようにする。なお、kiso1.exeのレイヤー3に直接net1.swfを読み込ませることはできました。

使用ソフトは、FLASHMXです。よろしくお願いします。

※1
ローカルのMy Documentsフォルダの中にkiso1.exe(※2)とkisoフォルダ。kisoフォルダの中にkiso2.swf(※3)。管理するネット上にnet1.swf (※4)。

※2
下のレイヤーからレイヤー1、レイヤー2、レイヤー3。レイヤー1は、名前がシンボル1のムービークリップ。レイヤー2は、名前がシンボル2で、インスタンス名がusiroのムービークリップ。レイヤー3は、名前がシンボル3で、インスタンス名がmaeのムービークリップ。

※3
シンボルにインスタンス名がなく、レイヤー3のシンボルがボタンであること意外、kiso1.exeと同じ。

※4
レイヤーが2までしかなく、レイヤー2のシンボルがボタンであること意外、kiso2.swfと同じ。

A 回答 (3件)

#1&2 です。


#2の補足です。kiso/kiso2.swf が読み込まれない件に関しては,#2以上に書くことはできません。
この補足は,#2の後半部分

>> ただただただ…ただし。
>> 「kiso2.swf」は同じ物ですよね。
   ~省略~
>> あったら,当然,「usiro」ではなく,「mae」にswfがロードされますので,要注意です。

の補足です。

#2の最後に上記のように書きましたが,_root から書くと,そうなってしまいます。
ですから,_root の書き方をやめて,相対パスで書けば,
「usiro」は「usiro」,「mae」は「mae」にそれぞれ違うswfがロードされます。


---kiso/kiso2.swfのボタン------------------
on (release) {
loadMovie("http://~/net1.swf", this);
}
--------------------------------------

---ネット上net1.swfのボタン----------------
on (release) {
loadMovie("http://~/○○.swf", this);
}
--------------------------------------

---ネット上○○.swfのボタン----------------
on (release) {
loadMovie("http://~/net1.swf", this);
}
--------------------------------------

です。
ターゲットは "this" ではなく this です。"" を付けたらうまく行きませんでした。
ターゲットの "" についてですが,本家,
http://www.macromedia.com/jp/support/flash/ts/do …
の例

例:"_root.targetClip"ターゲットパスにムービーをロードする。
loadMovie ("http://some.url.com/somemovie.swf", "_root.targetClip")

ともあるように,"" を付けるのが正式かと思っていました(います)が,
上で示した3つの場合は, "" があるとダメのようです。
なぜかという理由はすみませんがわかりません。

この回答への補足

"" を付け忘れる誤りがありました。訂正させていただきます。

補足日時:2005/07/31 23:36
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
また、お礼の言葉が遅れまして申し訳ございません。
まず、前回希望するようにならなかったことについて書かせていただきます。
御回答のとおり、
 ※イができなかったのは,※アができなかったので,確認できなかった
ということです。
次に、今回の御回答(No.2とNo.3)の方法でさせていただいた結果について書かせていただきます。
前回希望するようにならなかった※アと※イのどちらも解決しました。
御回答(NO.2)の時には、専ら※アについて御回答の方法でさせていただきましたが、希望するようになりませんでした。
御回答(NO.3)の時、※アを止め、※イについて御回答の方法でさせていただき、希望するようになりました。
その後、※アについていろいろ試みた結果、
 loadMovie("kiso/kiso2.swf", _root.mae);
または、
 loadMovie("kiso/kiso2.swf", mae);
という方法ではなく、
 loadMovie("/kiso/kiso2.swf", _root.mae);
または、
 loadMovie("/kiso/kiso2.swf", mae);
という方法によって希望するようになりました。
/があってもなくても相対パスの記述としては正しく、同じことだと思うのですが、解決したのでよかったです。
大変お手数をおかけしましたが、親切に対応してくださりありがとうございました。
また質問させていただいたときにはよろしくお願いします。

お礼日時:2005/07/31 23:34

#1です。



>> loadMovie("kiso/kiso2.swf", _root.mae); の_root.maeに""が付いていないのは、

すみません。正確には,

--------------------------------------
loadMovie("kiso/kiso2.swf", "_root.mae");
loadMovie("kiso/kiso2.swf", "_root.usiro");
--------------------------------------

ということになります。普通は, "" を付けますね。付け忘れです。

>> 希望するようにならなかったことは、動作で、
>>  kiso1.exe を開く → ※A と ※B に kiso2.swf をロード。 ※ア
>>  kiso2.swf ボタンクリック → net1.swf をロード。 ※イ

※イができなかったのは,※アができなかったので,確認できなかったと解釈してよろしいですよね。
※アに関しては,#1で書いた

>> kiso1.exe の フレーム1(?)に
>> --------------------------------
>> loadMovie("kiso/kiso2.swf", _root.mae);
>> --------------------------------
>> と書けば,mae に kiso/kiso2.swf がロードされます。

の部分です。
「フレーム1(?)に…」と書いていますが,アニメーションの構造によって,フレーム1かどうかが変わるので (?) を付けています。
当たり前のことと言えば当たり前ですが,
「_root.mae」がすでに存在していて(ロードされていて(表示されていて)),
その「_root.mae」に「loadMovie();」をかけないと,ムービーはロードされません。
「_root.mae」がフレーム15から登場するのであれば,フレーム15以降に「loadMovie();」が実行されなければなりません。
ですから,普通は,「_root.mae」がフレーム15フレームから登場するのであれば,フレーム15のタイムラインに,

--------------------------------------
loadMovie("kiso/kiso2.swf", "_root.mae");
loadMovie("kiso/kiso2.swf", "_root.usiro");
--------------------------------------

を書けば良いのです。
しかし,このスクリプトが「_root.mae」の登場する,0.000001秒前にでも実行されてしまったら,
実行するターゲットが存在しないことになり,何も起こりません。
すごく無難にするなら,「_root.mae」の登場するフレームの次のフレームに,
上記スクリプトを書いてみてください。
もし,そもそも「kiso1.exe」が1フレームしかない場合は,2フレームに増やして,

-------------------------------------
stop();
loadMovie("kiso/kiso2.swf", "_root.mae");
loadMovie("kiso/kiso2.swf", "_root.usiro");
-------------------------------------

とすれば大丈夫だと思います。
または,「_root.mae」と同時に登場するムービークリップを作って,そのムービークリップに,

-------------------------------------
onClipEvent (load) {
loadMovie("kiso/kiso2.swf", "_root.mae");
loadMovie("kiso/kiso2.swf", "_root.usiro");
}
-------------------------------------

と書いても,うまく行く場合が多々あります。

実際に,My Documents に書かれたようなswfやexeを作り,
ネット上にも「net1.swf」などをアップして,試してみました。
すべて上手く行きました。

ただただただ…ただし。

「kiso2.swf」は同じ物ですよね。
「usiro」と「mae」の2箇所に読み込むのも,同じ物です。

つまり,「usiro」に読み込んだ,「kiso2.swf」のボタンに,

---------------------------------------
on (release) {
loadMovie("http://~~/net1.swf", "_root.mae");
}
---------------------------------------

と書いてあったら,当然,「usiro」ではなく,「mae」にswfがロードされますので,要注意です。
    • good
    • 0

えーっと…


すんごい話がややこしいですね。でも,スクリプトは簡単です。

構造から↓。
----------------------------------------------------
マイコンピュータ
 ┗My Documents (フォルダ)
   kiso1.exe (ファイル)
   ┃   ├レイヤー3…MC(インスタンス名:mae) ※A
   ┃   ├レイヤー2…MC(インスタンス名:usiro) ※B
   ┃   └レイヤー1…MC(インスタンス名:無)
   ┃
   ┗kiso (フォルダ)
     ┗kiso2.swf (ファイル)
        ├レイヤー3…MC(インスタンス名:無)
        ├レイヤー2…MC(インスタンス名:無)
        └レイヤー1…ボタン(インスタンス名:無)
----------------------------------------------------
ネット(Web)上
  ┗http://~~/○○ (フォルダ)
            ┗net1.swf
               ├レイヤー2…ボタン(インスタンス名:無)
               └レイヤー1…ボタン(インスタンス名:無)
----------------------------------------------------
次に,動作↓。
kiso1.exe を開く → ※A と ※B に kiso2.swf をロード
kiso2.swf ボタンクリック → net1.swf をロード
net1.swf ボタンクリック → ○○.swfネット上の ○○.swf をロード
○○.swf ボタンクリック → net1.swf をロード


という感じで良いですか?
理解するのも苦しいですが,よく説明されましたね。
以上を理解した(つもり)だけで,頭がぷよぷよになってしまいました。

まずは,「シンボル1」~「シンボルn」の名前は無視しましょう。
これはFlashの画像データや構造を管理するためのシンボル名で,スクリプトには一切関係ありません。
次に,レイヤーを無視しましょう。
これは,表示される上下関係ではとても重要ですが,今回の場合スクリプトには関係しません。

それで,※A と ※B があるので,とりあえず ※B を無視します。


1.「※A の mae に,kiso/kiso2.swf をロードする。 」

kiso1.exe(_root)
  └mae ← ココに kiso/kiso2.swf をロード

ですから,
kiso1.exe の フレーム1(?)に

--------------------------------
loadMovie("kiso/kiso2.swf", _root.mae);
--------------------------------

と書けば,mae に kiso/kiso2.swf がロードされます。
_rootのフレームアクションなので _root.mae の _root. は無くてもかまいません。
この時点で,kiso/kiso2.swf は kiso1.exe(_root) から見ると _root.mae になっています。
ですから,


2.「kiso2.swf ボタンクリック → net1.swf をロード」

kiso1.exe(_root)
  └mae ← ココに net1.swf をロード

ということになり,
kiso2.swf のボタンには

---------------------------------------
on (release) {
loadMovie("http://~~/net1.swf", "_root.mae");
}
---------------------------------------

ということになります。
以降,ターゲットは,ずっと「"_root.mae"」で良いことになります。
※B の場合も同様に考えてください。
ずっと,「"_root.usiro"」で良いことになります。

この回答への補足

質問で、 "以外" を "意外" と変換する誤りがありました。訂正させていただきます。

補足日時:2005/07/31 02:48
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
説明不足のため大変お手数をおかけしましたが、詳しく教えてくださりありがとうございます。
御回答の方法でさせていただいた結果、希望するようになったことと、希望するようにならなかったことがありました。
そこで、問題解決とはあまり関係がないことかもしれませんが、まず少し訂正させていただきます。
構造で、
 kiso2.swfは、レイヤー1がボタンではなく、レイヤー3がボタン。
 net1.swfのレイヤー1は、ムービークリップ。
次に、希望するようになったことと、希望するようにならなかったことについて書かせていただきます。
希望するようになったことは、動作で、
 net1.swf ボタンクリック → ネット上の ○○.swf をロード。
 ○○.swf ボタンクリック → net1.swf をロード。
希望するようにならなかったことは、動作で、
 kiso1.exe を開く → ※A と ※B に kiso2.swf をロード。
 kiso2.swf ボタンクリック → net1.swf をロード。
また、質問にも書かせていただいたとおり、
 kiso1.exe を開く → ※A と ※B に net1.swf をロードは、
 _root.mae.loadMovie("http://*****/net1.swf");
 loadMovie("http://*****/net1.swf", "mae");
 loadMovie("http://*****/net1.swf", "_root.mae");
のいずれの方法でもできました。
最後に、上記のことに関連して、疑問を書かせていただきます。
もう少し詳しく理解したいのですが、教えてくださいませんか。
 ・御回答のアクション loadMovie("kiso/kiso2.swf", _root.mae); の_root.maeに""が付いていないのは、loadMovieの場所の式がチェックされているからでしょうか。
 ・loadMovieの場所を_root.maeとした場合、maeとした場合、式にチェックをした場合、チェックをしない場合の4通り行いましたが、kiso1.exe を開く → ※A と ※B に kiso2.swf をロード はできませんでした。この結果には、どのようなことが考えられるでしょうか。
よろしくお願いします。

お礼日時:2005/07/31 02:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!