アプリ版:「スタンプのみでお礼する」機能のリリースについて

よく、いくつかのswfムービーで構成されているサイトをみます。
セキュリテイー的にも、いくつかにわけてあると安心なのですが、どのようにひとつに読み込んでいけばよいのでしょうか?
ひとつがおわったらどんどん指定した外部swfムービーを流していきたいのです。loadMovieや、unloadMovieなどを使うのでしょうけれど、一つ終わったら次へどんどん再生していきたいのです。どうしたらよいのでしょうか。。。お願いします。

A 回答 (2件)

セキュリテイー的に安心かどうかはさておき,


連続して loadMovie する方法ですが,

例えば,親(読み込む)SWFと同じフォルダに
「movie1.swf」「movie2.swf」「movie3.swf」「movie4.swf」…
という感じに子(読み込まれる)SWFがあったとします。
そして「movie1.swf」から順に「movie2.swf」「movie3.swf」…と読み込まれるとします。


◎すごくシンプルな方法

親SWFの_rootに,例えば「loadMC」というインスタンス名のムービークリップを作ります。
このMCは小さくて透明のMCか,中に何も入っていない空のMCが良いと思います。
そして,親SWFのフレームのスクリプトに

_root.loadMC.loadMovie("movie1.swf");

と書けば,「loadMC」というインスタンス名のムービークリップに「movie1.swf」が読み込まれます。
またはボタンにスクリプトを書いて,ボタンで読み込みをさせても良いです。
そして,「movie1.swf」の最終フレームに,

_root.loadMC.loadMovie("movie2.swf");

と書いておきます。これで同じ「loadMC」に「movie2.swf」が読み込まれます。
同じ所に新たなムービーを読み込むと自動的に前のムービーは unload されるので,
unloadMovie(); は必要ありません。
「movie2.swf」の最終フレームには
_root.loadMC.loadMovie("movie3.swf");
「movie3.swf」の最終フレームには
_root.loadMC.loadMovie("movie4.swf");
  …  …
と書いて行けば良いわけです。
原理はこれだけです。簡単ですね。


◎少し確実な方法

上のシンプルな方法だと,「movie1.swf」→「movie2.swf」と切り替わるときにスムーズに流れなかったり,
場合によっては NowLoadind のような「読み込み中」画面をいちいち用意しなければならないかもしれません。
これを避けるためには,「movie1.swf」が終わる前に「movie2.swf」を読み込んでおくと良いです。
以下は,その1つの方法です。

親SWFに読み込むSWF数のレイヤーを余分に用意します。
そして,上のレイヤーから順に同じ位置に
「loadMC1」「loadMC2」「loadMC3」「loadMC4」…
というインスタンス名のムービークリップを置いて行きます。
「loadMC1」~「loadMC?」は全て同じムービークリップで良いです。
いちいち作る必要はなく,コピペで増やして行って,インスタンス名だけをそれぞれ付ければ良いです。

そして,親SWFのフレームのスクリプトに

_root.loadMC1.loadMovie("movie1.swf");

と書けば,「loadMC1」というインスタンス名のムービークリップに「movie1.swf」が読み込まれます。
またはボタンにスクリプトを書いて,ボタンで読み込みをさせても良いです。

「movie1.swf」の最終フレームから数フレーム~数十フレーム前には,

_root.loadMC2.loadMovie("movie2.swf");

と書いておきます。これで次の「loadMC2」に「movie2.swf」が読み込まれます。
(「movie2.swf」の最初のフレームには,stop(); と書いて止めておきます。)

そして,「movie1.swf」の最終フレームに,

_root.loadMC2.play();
_root.loadMC1.unloadMovie();

と書きます。これで,「loadMC2」に読み込まれた「movie2.swf」がスタートし,
「movie1.swf」自信はアンロードされます。

「movie2.swf」の最初のフレームには上の ( ) 内にも書いたように,

stop();

を書いておきます。これで読み込まれても自動的にスタートしません。
また,最初のフレームは空白フレームにしておくほうが良いかもしれません。
(「movie1.swf」より「movie2.swf」の方が大きい場合,見えてしまうかもしれないため。)

そして,あとは「movie1.swf」と同様。
「movie2.swf」の最終フレームから数フレーム~数十フレーム前には,

_root.loadMC3.loadMovie("movie3.swf");

「movie2.swf」の最終フレームに,

_root.loadMC3.play();
_root.loadMC2.unloadMovie();

と書きます。
「movie3.swf」以降は同様です。

=====================================

本題とは関係ないかもしれませんが
セキュリテイー的に安心というのは保存されないということですか?

もしそうだとしたら,少し間違っているかもしれません。
たしかにloadMovieをすると HTML には 
<EMBED src="movie1.swf" ~~ </EMBED>
みたいにSWF名を書かなくて良いので,SWF名はHTMLのソースからはわかりません。
でも,ブラウザのキャッシュには読み込んだSWFやJPEGやTXTなどすべてが残ります。
手動でそこから保存しても良いですし,SWFを保存するソフトの半分くらいはキャッシュ情報から保存する物だと思います。
たしかに保存はされにくくなるかもしれませんが,案外ソースを読めない人の方がソフトでスラスラ取って行くかもしれません。

本題とは少しずれた余談でした。

この回答への補足

sassakunさん、今朝はありがとうございました。
外部swfをつぎつぎに読み込んでいく件ですが、シンプルなものはうまくいきました。けれど今度は、アクションスクリプトでうごかしている外部swfは上手くアクションがきいていないようです。_globalとかつかっていることが問題なのですかね。。。?親のswfにおおもとのアクションスクリプトをうつしてやらなければならないのでしょうか?難しいですね。。。私のやりかたがわるいのでしょうか。。。
すでに一つ目の外部swfが、ループを繰り返してしまったりして、ぜんぜん次にすすみません。どうしたらよいのでしょう。。。困った。。。

補足日時:2005/09/23 17:28
    • good
    • 0

#1です。


補足の内容ではよくわかりませんが,タイムラインはほとんど使わず,
スクリプトで動かしている外部SWFがあるということでしょうか。

スクリプトで動かした場合はスクリプトで制しないとなりません。
また書かれたスクリプトによって制し方は全く違うので,答えることはできません。
少なくとも _global自体に問題があるのではなく,その中に書かれた関数に問題があるか,全く別のところに問題があるかだと思います。

スクリプトはスクリプトによって制しないとなりませんが,ひょっとしたら,できるかもしれない方法を書いておきます。

-----------------------------
onClipEvent (load) {
frm = 0;
}
onClipEvent (enterFrame) {
frm++;
if (frm == 30) {
_root.loadMC3.loadMovie("movie3.swf");
} else if (frm == 50) {
_root.loadMC3.play();
_root.loadMC2.unloadMovie();
}
}
----------------------------

こんなので↑できるかもしれません(できないかもしれません)。

ループしてしまうSWFの1フレームあたりに,透明もしくは空のムービークリップを作って,
上のようなスクリプトを書きます。
フレームで出てくるスクリプトを,フレームではなくスクリプトの中に入れているだけです。

---上のスクリプトの説明--------
//このムービークリップがよみこまれたら
onClipEvent (load) {
   //変数frm (フレーム数のつもり) を 1 に設定
   frm = 1;
}

//1フレーム進む時間ごとに以下を計算
onClipEvent (enterFrame) {

   //変数 frm を1ずつ加算
   frm++;

   //もし flm が30になったら
   if (frm == 30) {
      //親SWFの loadMC3 に movie3.swf をロード
      _root.loadMC3.loadMovie("movie3.swf");

   //もし flm が30になったら
   } else if (frm == 50) {
      // loadMC3 をスタートさせる
      _root.loadMC3.play();
      //自分自身 (movie2.swf) をアンロード
      _root.loadMC2.unloadMovie();
   }
}
----------------------------

if (frm == 30) や if (frm == 50) の部分を調整すればうまく行くかもしれません。
単なる案です。うまく行かない可能性もありますが,方法の1つとして提示しておきます。
それ以上はわかりませんね。
    • good
    • 0
この回答へのお礼

sassakunさん、親切にどうもありがとうございました。
感謝していますm(__)m

お礼日時:2005/09/26 06:57

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