- 締切済み
2回目以降の訪問でFlashをSkipさせる方法について
表題の方法について、以前の質問や他サイトを参考にSharedObjectというものを 使用するという事は分かったのですが、以下の方法をとったところ、初めての訪問でも Movieが再生されず、最終フレームで止まったままとなってしまいます。 どこが間違っているのか皆目検討が尽きません。 今のFlaファイルは ■先頭フレーム:ラベル名「startMovie」 ■2フレーム目 フレームActionとして var my_so = SharedObject.getLocal("MyCookie"); if (my_so.data.haveVisited != 1) { my_so.data.haveVisited = 1; my_so.flush(); this.gotoAndPlay("startMovie"); } else { this.gotoAndStop("endMovie"); } ■最終フレーム:ラベル名「endMovie」 ボタンのオブジェクトActionとして on (release) { this.gotoAndPlay("startMovie"); } フレームActionとして this.stop(); となっています。 どうしたら初めての訪問でMovieが再生され、2度目の場合は 最終フレームでSTOP、REPLAYボタンで再生、という風にできるでしょうか。 どうかアドバイスの程宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
#1です。 >> 初めての訪問でも >> Movieが再生されず、最終フレームで止まったままとなってしまいます。 >> どこが間違っているのか皆目検討が尽きません。 少なくとも見当はつきましたか? #1で書きましたように,別に間違っているわけではないですが,書いている内容が変なのです。 初めての訪問でもMovieが再生されず、最終フレームで止まったままとなってしまうように書いてあるので,そうなるというだけのことです。 細部も検討&検証 してみましたが,特に間違っているところはないようです。 ただ,書かれている内容だとPCは正常に動きますが人が見ると変な動きになります(なると思います)。 ムービー全体がどのような構成になっているのかがわからないので, どうすれば解決するのかは,こちらとしてはわかりませんが, もし,普通のムービーのように 最初の方からダーっとアニメージョンが流れて,最後のフレームでストップするようなアニメーションであれば,スクリプトはそのままで, ■先頭フレーム:ラベル名「startMovie」 ↓ 変更 ↓ ■3フレーム目:ラベル名「startMovie」 のように,ラベル名の書いたフレームを フレーム3 以降にすれば, 初回訪問では「startMovie」から最終フレームまでアニメーションが流れて,最終フレームのボタンをクリックすると,「startMovie」まで戻ってまたアニメーションが流れる。 2回目以降は2フレームまで進んだ後,すぐに最終フレームに行ってストップし,最終フレームのボタンをクリックすると,「startMovie」まで戻ってアニメーションが流れる。 というものになります。 何度も状況を変えて,solファイルも1回1回削除して, 繰り返し実験してみましたがこの方法で大丈夫でした。 実際は フレーム3 からアニメーションが始まるものなのかどうかはわかっていません。 普通の場合,そうすれば解決するということです。 ===以降は先の話=================== もし以前の質問でご覧になられていたらわかると思いますが, その,いきなり最終フレームに飛ぶパターンは,ローカルPC上ではちゃんと動いても,サイトにUPして見てみると途中で止まって動かなくなる場合があります。 場合があるというより,おそらく必ず途中で止まって動かなくなると思います。 それは,ムービーが完全に読み込まれていないのに,最終フレームまでジャンプするように書いてあるからです。 最終フレームまで読み込まれていないと,最終フレームが見つからないので,ムービーは停止します。 解決策はよく見る "Now Loading" とか出てくるようなものを用意して,ロード中はフレーム2に進ませないような措置をすることです。 簡易的なものであれば, フレーム1に,"フレーム1にだけ" 存在するムービークリップを作って, そのムービークリップに ------------------------------- onClipEvent (load) { _root.stop(); } onClipEvent (enterFrame) { if (_root.getBytesLoaded()>=_root.getBytesTotal()) { _root.play(); } else { _root.stop(); } } ------------------------------- と書けば,ムービーが読み込まれるまで,フレーム1で止めておく物ができます。 ただ上記の物は,単にムービーを止めているだけで,何の装飾も動きもないものです。 ネット上や書籍などで探せば,いわゆる "Now Loading" 画面のサンプルなどが見つかると思います。動く部分とか,その好みとかは文字だけでは伝えにくいので,そのようなサンプルを参考にされる方が良いと思います。 わざわざ「startMovie」とかいうラベル名を存在させて, なぜか,フレーム2 に SharedObject.getLocal を持って来ているのは,そのためではないのですか? フレーム1 を"Now Loading" 画面 にするために,フレーム2 に SharedObject.getLocal を持って来ているのだと思いますが。 先頭フレームがラベル名「startMovie」のままだと, "Now Loading" 画面 に戻るということになり,ますます変になりますよ。
細部を検討,検証していませんが, ざっと見たところ,完全に変です。 まず初回,そのサイトを訪問します。 当然 フレーム1 ラベル名「startMovie」 が一瞬表示されそのまま通過します。 次に フレーム2 に進みます。 まだsolファイルは保存されていないので haveVisited != 1 の状態です。 ここで haveVisited = 1 が与えられ, gotoAndPlay("startMovie"); の指示を受けて, また フレーム1 ラベル名「startMovie」 に戻ります。 そして再び フレーム2 に到達します。 この時点で, haveVisited == 1 の状態ですから haveVisited != 1 ではないので,elseの方に行きます。 gotoAndStop("endMovie"); の指示を受けて最終フレーム:ラベル名「endMovie」に飛びます。 1回目の訪問の時だけほんの少しもたつくかもしれませんが, 1回目でも2回目でも何回目でも,最終フレーム:ラベル名「endMovie」に飛びます。 なぜ, this.gotoAndPlay("startMovie"); を書かれているのかが疑問です。 this.play(); または無記入で良いのではないでしょうか。 >> ■最終フレーム:ラベル名「endMovie」 >> ボタンのオブジェクトActionとして >> on (release) { >> this.gotoAndPlay("startMovie"); >> } これも当然変ですね。 gotoAndPlay("startMovie"); でフレーム1に戻ったら,次はフレーム2です。 haveVisited == 1 の状態ですから, haveVisited != 1 ではないので elseの方に行きます。 gotoAndStop("endMovie"); の指示を受けて最終フレーム:ラベル名「endMovie」に飛びます。 つまり,最終フレームに戻ってしまいます。 細部を検討,検証していません。 他にも変な部分があるかもしれませんが,大まかに見て, スクリプトが理想状態で実行された場合とりあえず変です。