誕生日にもらった意外なもの

表題の方法について、以前の質問や他サイトを参考に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ボタンで再生、という風にできるでしょうか。

どうかアドバイスの程宜しくお願い致します。

A 回答 (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" 画面 に戻るということになり,ますます変になりますよ。
    • good
    • 0

細部を検討,検証していませんが,


ざっと見たところ,完全に変です。

まず初回,そのサイトを訪問します。
当然 フレーム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」に飛びます。
つまり,最終フレームに戻ってしまいます。

細部を検討,検証していません。
他にも変な部分があるかもしれませんが,大まかに見て,
スクリプトが理想状態で実行された場合とりあえず変です。
    • good
    • 0

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