• 締切済み

SharedObjectが効かない

FLASHで、一定時間内にアクセスするとオープニングを飛ばすスクリプ トを書いています。Javascriptのクッキーと同じスクリプトの「SharedObject」を使用しています。 www.hfm-kenchan.com/Lesson/log_qa/D0512073.htm こちらのサイトの解説とサンプルを使用させてもらい、作ってみました が、ページを更新しても1フレーム目からのアニメーションが始まって しまい、スクリプトが効いてません。 現在作っているファイルのアニメーションが25fps、171フレームまであるのが原因だと思いますが。 変数に入っている数字などを変えてみましたが、効きません。 同じサンプルでもレイヤー数がスクリプト用のレイヤーと合わせても3 レイヤー、フレーム数11フレームで作ると効きます。 スクリプトのレイヤーにさらに別のスクリプトを書き加えてやる必要があるのかと思いますが、スクリプト素人である為判りません。 どなたか判る方いらっしゃるでしょうか。お教え下さい。 1フレーム目に入るスクリプトを書いておきます。 span = 15; nowDate = new Date(); nowAC = nowDate.getTime(); cookie = SharedObject.getLocal("accessTime"); if (cookie.data.beforeAC != undefined) { Time = Math.floor((nowAC-cookie.data.beforeAC)/1000); cookie.data.beforeAC = nowAC; if (Time < span) { this.gotoAndStop("menu"); } } else { cookie.data.beforeAC = nowAC; } 使用ソフトはFLASH8、環境はWDXPです。どなたかお助け下さい。

みんなの回答

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

ご質問の, FLAファイルデータを持っていないので検証はできませんが, 171フレームあるから動作しないという, その予想は当たっていると思いますよ。 一応こちらの#4でも回答しています↓。 「一度再生したFlashをスキップするには」 http://oshiete1.goo.ne.jp/qa2167133.html  ↑教えて!goo ↓OKWave (同じです) http://okwave.jp/qa2520618.html > スクリプトのレイヤーにさらに別のスクリプトを > 書き加えてやる必要があるのかと思いますが これも正解ですが,ちょっと違うと思います。 問題は,SharedObject ではなく, > 一定時間内にアクセスするとオープニングを飛ばす この 「オープニングを飛ばす」 部分だと思います。 「オープニングを飛ばす」 ということがどういうことか具体的にはわかりませんが, 171フレーム近くに gotoAndPlay(); しているのではないでしょうか。 SharedObject 抜きで,フレーム1 に,いきなり gotoAndPlay(171); と書いても動作しないと思います。 なぜなら,そんなフレームはまだ読み込まれていないからです。 上に書いた URL のように, フレーム1 に 「NowLoading...」 みたいなものだけを置いて, 他は何も置かないようにして, そのフレーム1を表示中に全てをフレームをダウンロードさせておいて, フレーム2 で,書かれている,SharedObject 絡みのスクリプトを書くとうまく動作すると思いますよ。 上に書いた URL では,ビジュアル的に手抜きしていますから, 他の 「NowLoading...」を参考にしてくれても良いですし, フレーム1 に次のようなスクリプトを書いても良いと思います。 コピペするだけで使えると思います。 // ---「AS のみで作る 簡易 Now Loading」----------------------- // // --- 取りあえずストップ ------ _root.stop(); // // バーの100%ロード時の横幅の設定(※可変) var b_w = 150; // // --- 表示用ムービークリップの作成--- // 空のムービークリップ indicator を深度 1 に作成 _root.createEmptyMovieClip("indicator", 1); // indicator の座標をステージ中央に設置 _root.indicator._x = Stage.width/2; _root.indicator._y = Stage.height/2; // // ---「Now Loading ...」という文字を作成--- // テキストフィールド title を作成 _root.indicator.createTextField("title", 1, 0, 0, 0, 0); // テキストフィールド title のプロパティを設定 _root.indicator.title.autoSize = true; _root.indicator.title.textColor = 0x0000cc; _root.indicator.title.text = "Now Loading ..."; // テキストフィールド のテキストのフォーマット var format1 = new TextFormat(); format1.size = 20; _root.indicator.title.setTextFormat(format1); // テキストフィールド の座標を指定 _root.indicator.title._x = -_root.indicator.title._width/2; _root.indicator.title._y = -60; // // ---デジタル表示部分の作成--- // テキストフィールド percentage を深度 4 に作成 _root.indicator.createTextField("percentage", 4, 0, -20, 0, 0); // テキストフィールド title のプロパティを設定 _root.indicator.percentage.autoSize = true; _root.indicator.percentage.textColor = 0x000000; // // --- バーの作成 --------- // バーの下塗りを作成 // 空のムービークリップ underbar を深度 2 に作成 _root.indicator.createEmptyMovieClip("underbar", 2); // バーの座標を指定 _root.indicator.underbar._x = -b_w/2; _root.indicator.underbar._y = 20; // バー自体を描画 with (_root.indicator.underbar) { beginFill(0xcccccc, 100); lineStyle(0, 0x000000, 100); moveTo(0, 0); lineTo(0, 10); lineTo(b_w, 10); lineTo(b_w, 0); endFill(); } // // 空のムービークリップ bar を深度 3 に作成 _root.indicator.createEmptyMovieClip("bar", 3); // バーの座標を指定 _root.indicator.bar._x = -b_w/2; _root.indicator.bar._y = 20; // バー自体を描画 with (_root.indicator.bar) { beginFill(0x0000cc, 100); lineStyle(0, 0x000066, 100); moveTo(0, 0); lineTo(0, 10); lineTo(1, 10); lineTo(1, 0); endFill(); } // // --- NowLoading を動作させる --- // 1フレーム進む時間ごとに毎回実行 _root.indicator.onEnterFrame = function() { // // ロードされた割合を計算 var par1 = _root.getBytesLoaded()/_root.getBytesTotal(); var par2 = Math.floor(par1*100); // // デジタル表示部分に表示 this.percentage.text = par2+"%"; // テキストフィールド のテキストのフォーマット var format2 = new TextFormat(); format2.size = 16; this.percentage.setTextFormat(format2); // テキストフィールド の x座標を指定 this.percentage._x = -this.percentage._width/2; // // バーを伸ばす this.bar._width = _root.b_w*par1; // // タイムライン制御 if (par1<1) { _root.stop(); } else { // ※↓必要に応じて変更 _root.gotoAndPlay(171); // この indicator を消す this.removeMovieClip(); } }; /* 作成環境:Flash MX 以上 閲覧環境:Flash Player 6 以上 ActionScript 1.0 */ // ---------------------------------------------- ※ メインムービーのみのロード済パーセンテージを表示します。 ※ また,勝手にロードが済み次第 _root.gotoAndPlay(171);   するようにしていますが,   そこは必要に応じて,違うフレーム数に変えてください。

thinktooth
質問者

お礼

お礼が遅くなりすいません。 1フレーム目にプリローダーを入れてやれば、全体のロード時間を待ってくれるので2フレーム目に入れているSharedOjectが効いてくれるとアドバイスを頂きましたが、1フレーム目に97行目の_root.gotoAndPlay(フレーム数);と入れる為2フレーム目に入っているSharedOjectがやはり効きません。 _root.gotoAndPlay(2);と入れるとSharedOjectは効かず、2度目の訪問でも2フレーム目からのアニメーションから始まってしまい、_root.gotoAndPlay(静止画の入ってるフレーム数);と入れると2フレーム目から入れているアニメーションは一度目の訪問から飛ばされてしまいます。 一度目は170フレーム近くのアニメーションさせ、2度目からは15秒以内に訪れた場合は静止画が置いてあるフレームに飛ばせたいのですが、それが出来ないのです。

関連するQ&A

専門家に質問してみよう