(2)トップページからすぐに戻った場合のloadingの防ぎ方
- トップページからすぐに戻った場合、一分間のloadingが発生する問題があります。
- サブからトップへすぐに戻った場合は再生せずに最後のフレームへジャンプしてくれますが、その前に一分間のloadingが発生してしまいます。
- このloadingを防ぐ方法を教えてください。
- ベストアンサー
(1)loading後再生→(2)すぐにアクセスした場合飛ばす
現状できてることは (1)トップページにてLoading後(一分くらい)→再生→最後のフレームではストップ (2)そしてサブからトップへすぐに戻ったとき→Loading(一分)後、再生せず→最後のフレームでストップということまではできてます。 問題は(2)の"またLoading(一分)後”なのです。 サブからすぐにトップへ戻ったときは再生せずに 最後のフレームへジャンプしてくれるのはいいのですがその前にLoadingが発生して一分たってから最後の フレームへジャンプするのです。このときのloading の防ぎ方を教えてください。 現状スクリプトを下にて参考にしてください。 Flash MX6 フレーム数940 フレーム1 onClipEvent (load) { _root.stop(); //タイムラインの1フレーム目で止めておく } onClipEvent (enterFrame) { // すべて読み込んだら3フレーム目へ if (100 == Math.floor(_root.getBytesLoaded()/_root.getBytesTotal()*100)) { _root.gotoAndPlay(3); } } フレーム 2 gotoAndStop (1); ---------------↑ここまではLoading--------------- フレーム4 onClipEvent (load) { myObject = SharedObject.getLocal("Watch"); myDate = new Date(); Watch2 = myDate.getTime(); if (myObject.data.Watch1 != undefined) { Watch1 = myObject.data.Watch1; } else { Watch1 = 0; } //ココは60000で一分 if (Watch1+60000>Watch2) { //ここを最終フレーム _root.gotoAndStop(920); } } onClipEvent (enterFrame) { myDate = new Date(); Watch3 = myDate.getTime(); myObject.data.Watch1 = Watch3; } ----------↑一分内は940へジャンプ(前回sassakunさんにてご回答)-------------- フレーム4をフレーム1へ先にもってきたり 色々ためしましたがうまくいきませんよろしくおねがいします。
- taira812
- お礼率93% (134/144)
- Flash
- 回答数2
- ありがとう数1
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#1です。 サブというのは別ムービーではなくて,別ページのことだったのですね。 それで,サブHTMLから,TOPのHTMLに戻ったときの Loading画面ですね。 それだと,最終フレームに飛ばすときに NowLoading の画面は絶対に必要です。 これを抜くわけには行きません。 これについては前回のときも考えてはいたのですが, 話がさらに複雑になるので,以下は前回書かなかったことです。 最終フレームに飛ぶのであれば, NowLoading の画面は必要ですが 最終フレームに飛ばなければ, NowLoading の画面不要になります。 結論から言えば,最初に最後の写真をコピーして用意しておけば解決します。 まず, メインムービーのタイムラインの一番上のレイヤーのさらに上に,新しいレイヤーを追加して, そのレイヤーのフレーム1に,最後のフレームの写真をコピーしてください。 1 □ レイヤー 筆・□|●//////////////////// こんな感じで,最初から最後までその写真が見えている状態で良いです。 その写真を選択して,右クリック→シンボルに変換 でムービークリップシンボルにしてください。 そのムービークリップをダブルクリックして,ムービークリップの編集に移ります。 ムービークリップ内のタイムラインを2フレームにしてください。 そして,フレーム2 をキーフレームにして,フレーム1 の写真を削除してください。 ムービークリップの中の フレーム2 に写真がある状態で,フレーム1 は空白キーフレームになります。 ムービークリップ内のタイムラインを図示すると次のようになります。 1 □ レイヤー 筆・□|○|●| そして,フレーム1 のキーフレームに stop(); と書いてください。 これで,写真は フレーム2 に行けという指示を受けない限り表示されません。 「編集」→「ドキュメントの編集」でメインのムービーの編集に戻ります。 今,作った写真入りのムービークリップは,中心点を示す ○ だけが表示されると思います。 その ○ を選択して,下のプロパティパネルで <インスタンス名> を付けてください。 名前は何でも良いですが, LastPhoto というインスタンス名にしておきます。 NowLoading用のムービークリップは不要ですから,とりあえず削除してください。 そして, 例のSharedObjectのスクリプトを書いたムービークリップのスクリプトの ----------------------- //ここを最終フレーム _root.gotoAndStop(920); } ----------------------- の部分を次のように書きかえます。 ----------------------- //LastPhoto を フレーム2 に進める _root.stop(); _root.LastPhoto.gotoAndStop(2); } ----------------------- おそらくこんな感じでうまく行きますよ。 SharedObjectのスクリプトを書いたムービークリップは 現在 フレーム4 にあるわけですが,それを フレーム3 に移動させてください。 他のものは,なるべくそのままの場所がいいです。 最初に空白の 3フレームくらいができてしまいますができればそのままの方が良いです。 もし気になるようでしたら,1フレームずつ他のものを前にズラしても良いです。 しかしひょっとしたら,LastPhotoが フレーム2に行かないとか, フレーム2 に行ったとしても,他の物がチラッと見えてしまうかもしれないので, フレーム2 は空白キーフレーム フレーム3 にSharedObjectのスクリプトを書いたムービークリップ フレーム4 以降は現在のまま という感じが良い気がします。 ネットを通すと, この辺がプログラムのおもわく通りに行かないので難しいところですね。
その他の回答 (1)
お久しぶりです。 たしか,フットサルの方ですね。 今回書かれているようになる原因は, おそらく2番目のムービーを level 0 に読み込んでいるからではないかと思います。 最初のムービーを仮に A.swf 2番目のムービーを B.swf とすると, A.swf の最後のフレームで loadMovieNum("B.swf", 0); とされているのではないでしょうか。 最後の 0 が level 0 に読み込むという意味です。 次のムービーを level 0 に読み込むと,それまで level 0 にあったムービー(A.swf)はアンロードされてしまいます。 アンロードされるとメモリから解放されます。 メモリから解放されると再びメモリ上に読み込むのに時間がかかります。 ネット上から読み込む場合も,キャッシュから読み込む場合も, 時間の差はあるかもしれませんが,どちらにしても時間がかかることには変わりありません。 その時間の間,Loadingが発生します。 最初の A.swf と 2番目の B.swf の容量を合計してもおそらく 10MB には達しませんよね。 それくらいだと, A.swf をメモリから解放せずに B.swf を読み込めば問題はなくなります。 大まかな流れは, A.swfのLoading ↓ A.swfの再生 同時に B.swfの読み込み開始 ↓ A.swf最終フレームでstop(); 同時に B.swfの再生 ↓ B.swfの再生 ↓ B.swf終了 同時に B.swfの gotoAndStop(1); こうすると, A.swfのLoadingが2度目にはされなくなり, ついでに B.swf のLoading時間もなくなります。 一石二鳥です。 ~~~ 手順 ~~~ ◎ A.swf の方の編集 A.swfの最上レイヤーのさらに上にレイヤーを作ってください。 そのレイヤーの フレーム3 (再生開始フレーム)をキーフレームにしてください。 そこに,5mmくらいの小さな四角を描いて,その四角をムービークリップにしてください。 そしてその四角のムービークリップをステージの左上のコーナーに配置してください。 四角のムービークリップを選択したとき ムービークリップの中心に,中心点である ○ が表示されると思いますが, その ○ をステージの左上のコーナーの角に合わせる感じです。 タイムラインを図示するとこんな感じになります。 1 □ レイヤー 筆・□|○[]|●//////////////// その四角のムービークリップを選択, 下のプロパティパネルでインスタンス名を付けてください。 今回の説明では loadMC というインスタンス名を付けたとしておきます。 そして,タイムラインのフレーム3に _root.loadMC.loadMovie("B.swf"); と書いてください。 これで,この loadMC に2番目のムービーである B.swf が読み込まれます。 そして,A.swf の最終フレームに,おそらく書いていると思われる stop(); loadMovieNum("B.swf", 0); を↓, stop(); _root.loadMC.play(); と書きかえてください。 これで,読み込まれた B.swf がスタートします。 ◎ B.swf の方の編集 B.swf は少々手間かもしれません。 まず,タイムラインでフレーム1 を縦に全て選択して, 右クリック→「フレームの挿入」で,フレームを1つ追加してください。 そして,フレーム1 を空白フレームにするように,描いてある物を フレーム2 に移動させてください。 要は,何もないフレームをフレーム1に追加挿入するわけです。 タイムラインを雰囲気で図示すると次のような感じになるでしょうか。 1 5 □ レイヤー ・・□|○ []|●/// □ レイヤー ・・□|○|●//////// □ レイヤー ・・□|○ []| □ レイヤー ・・□|○ |●|●/// そして,他に何もない,タイムラインのフレーム1に stop(); と書いてください。決して, _root.stop(); とは書かないでください。 _root.stop(); も stop(); も,B.swf を単独で開いた場合は同じ意味ですが, A.swf に読み込まれた場合, _root.stop(); は _root である A.swf を stop(); させるという意味になってしまいます。 フレーム1に stop(); を書いておくと,A.swf のフレーム3でロードされたとき, B.swfはフレーム1で止まったままになるので,何も表示されません。 そして,B.swf のフレーム1を挿入したことによって, それ以降のタイムラインが 1フレームずつ後にずれるので, 全ての goto○○ と書いたスクリプトを1フレームずつ後に移動させてください。 あと,B.swfにもA.swfと同様の読み込み待ちムービークリップを用意していたとすると, ------------------------- onClipEvent (load) { _parent.stop(); //タイムラインの1フレーム目で止めておく } onClipEvent (enterFrame) { // すべて読み込んだら4フレーム目へ if (100 == Math.floor(_parent.getBytesLoaded()/_parent.getBytesTotal()*100)) { _parent.gotoAndPlay(4); } } ------------------------ と書きかえてください。 すべての _root を, _parent にしたのと, 最後の行を _parent.gotoAndPlay(4); で1フレーム後にずらしたのが変更点です。 _parent は相対パスで,そのムービークリップの親, つまり,B.swf の _root を指します。 _root のままだと,A.swf に読み込まれた場合, A.swf の_root を示すので, このムービークリップの意味がまったくなくなってしまいます。 そして,最初のムービーに戻るスクリプトはどうされているのかわかりませんが, 最初のムービーの 最終フレーム に戻りたいときは gotoAndStop(1); で,空白フレームに戻るので,自動的に A.swf の最終フレームが表示されます。 B.swf の背景ですが, 透明な部分があると,A.swf の最終フレームが透けて見えてしまうので, もし透明な部分がある場合は, B.swf の一番下に背景用のレイヤーを追加して,背景を白などに塗りつぶしてください。 当然,B.swf のフレーム1を塗りつぶすと,A.swf が見えなくなってしまうので, 塗りつぶすのは フレーム2 以降です。 また,A.swf に作った loadMC ですが, 塗りの四角がそのムービークリップ内にあると思うので, ダブルクリックで,そのムービークリップ内の編集に移り, その塗りを削除してください。空のムービークリップになります。 すると中心点の ○ だけが残ると思います。 その空の状態でOKです。 ========================= 長くてややこしくなりましたが,わかりましたでしょうか? わからなくなれば最初に書いた, ///////////////////////////// A.swfのLoading ↓ A.swfの再生 同時に B.swfの読み込み開始 ↓ A.swf最終フレームでstop(); 同時に B.swfの再生 ↓ B.swfの再生 ↓ B.swf終了 同時に B.swfの gotoAndStop(1); つまり,A.swf の loadMC に B.swf を読み込むのだけれども, B.swf の最初のフレームは空にして stop させておく。 ///////////////////////////// という全体のしくみを作る中で, 今自分はどの作業をしているのか確認しながら作業すると迷子にはならないと思います。 最初から,上のしくみを想定していると簡単なことですが, 後から修正する場合は,今までの作成過程と修正が頭の中で交錯するので, 理解しにくくなるとは思います。
補足
お久しぶりです、貴重なご回答ありがとうございます。今回の私の質問ですが前回の質問(別のファイル.swfへジャンプは可能?)(Flash再生中につぎのフレームをLoadingしときたい)に関して上記の回答を参考にさせて作成とさせていただきます。 改めて今現在の状態をいいますと実はB.swfが存在しないのです。 ---------現在の状態----------------------- (1)htmlのトップページにて A.swfのフレーム940までLoading中(1分くらい) ↓ (2)Loading後、A.swfを再生 ↓ (3)A.swf再生中or終了後どちらでもいいがサブページへ移動 ↓ (4)サブページからトップへ戻ったとき A.swfのフレーム940までLoading中(同じく1分) ↓ (5)A.swfを再生せず940のフレームへジャンプ,停止 ----------ここまで------------------------------ ...が現状となっています。 問題は(4)です。今回の質問はサブからトップへ戻ったときは(4)のLoadingをなくしてすぐ、(5)に行きたいのです。 以前ご回答いただいた、「1分くらいでアクセスした場合、同じムービーを2回みせたくない」処理にたいしLoadingをつけ加えた今回の質問ですが 最初の (1)のLoadingはOK、問題ないです。 要は (4)の同じLoadingが発生するのをふせぎ (5)A.swfを再生せず最後の940へジャンプ停止 勉強不足のため毎回お手数おかけしております 改めてご回答お待ちしております。
関連するQ&A
- Now Loadingから次のフレームに行かない
Flash8です。 1フレームに全体のサイズを読み込むスクリプト ------------------------- this.onEnterFrame = function() { nParcent = (_root.getBytesLoaded()/_root.getBytesTotal())*100; if (nParcent == 100) { _root.play(); delete this.onEnterFrame; } }; _root.stop(); ------------------------- と、%を数字で表記するためのスクリプト ------------------------- onClipEvent (enterFrame) { num = Math.floor(_root.getBytesLoaded()/_root.getBytesTotal()*100); _root.nowloading.percent = num+"%"; } ------------------------- を入れていて、100%読み込んだら次のフレームより開始(再生)したいのですけど、 現状読み込んで(数字も0から100に上がって行って)、100%になった状態でストップして再生しません。 何が足りないのでしょうか? アドバイスお願いします!
- 締切済み
- Flash
- 1フレーム~5フレームまで表示されなくなったのは。。。
こんにちわ毎回お世話になっております 新しいフラッシュを作ったのですが 前回のフラッシュにしようしたロード画面を 使いまわしました。 ムービークリップ自体には onClipEvent (load) { _root.stop(); } onClipEvent (enterFrame) { if (100 == Math.floor(_root.getBytesLoaded()/_root.getBytesTotal()*100)) { _root.gotoAndPlay(5); } } onClipEvent (enterFrame) { this.gotoAndStop(Math.floor(_root.getBytesLoaded()/_root.getBytesTotal()*100)); } と前回同様記述しました。 しかし今回はロード画面がでず 白紙の画面のまま読み込みが完了し そのままフレーム5に進んでしまっています。 何回もやりなおしたのですが どうしても白紙のまま読み込んでしまいます。 これはFLA自体が破損?したのでしょうか? 非常に困っています。 なにかアドバイスがありましたらお願いいたします。 別のロードムービーを作ったものの 白紙のまま読み込みされました。。。 FLASH8 WIN XP使用です。
- ベストアンサー
- Flash
- ムービークリップの中フレーム移動を「キーボード」で行いたい!
FLASH初心者なのですが、ちょっとしたクイズを作らなくてはいけなくて ActionScriptに挑戦しています。 rootにひとつのMCがあります。 このMCのタイムラインにはフレームが7個あり このフレームの移動を「Spaceキー」で動かしたいため rootのタイムラインに下記のようなscriptを書きました。 ------------------------------------- onClipEvent (enterFrame) { this.gotoAndStop(1); if (Key.getCode() == Key.SPACE){ this.gotoAndStop(2); } } ------------------------------------- このコードで「スペース」を押すと1フレームから2フレームへの 移動はできましたが、「スペースを押すたびに次のフレームにいってほしくて、 フレーム7ではストップしてほしい」という動作をさせるためには どうしたらいいのでしょうか? loopとかif...else if...などの構文がよくわからないなりに 試したのですが、うまくいきませんでした。 分かられる方助けてください、よろしくお願いします。
- ベストアンサー
- Flash
- 外部JPG読み込みでのLoading
こんにちは。 FLASH MXでものすごく単純なことをしようとしているのですが、 出来ずに困っております。 外部JPGを読み込むときにloading画面を表示したいのですが、 それが出来ずに困っております。 レイヤーが下記の様に3つあります。 script loading(loadingの文字)1フレーム目に文字、2フレーム目は空 base(読み込み用のMC) scriptの1フレーム目に下記のスクリプトを書いております。 --------------------------------------------------------- base.loadMovie("thumb/"+_name+".jpg"); if(this.getBytesTotal() < this.getBytesLoaded()){ this.gotoAndstop(2); }else{ this.stop(); } ---------------------------------------------------------- これでプレビューすると写真読み込みは完了しているのですが、 loadingの文字が写真の上にかぶさったままになります。 どのようにすればよろしいでしょうか?お教えいただければ 幸いです。
- ベストアンサー
- Flash
- 指定したフレームから再生できない(フラッシュ)
あるフレームになって時点で指定したフレームに飛び、そこからフレームを再生させようとおもっています。 指定したフレームへ飛ぶ事ができるのですがそこからストップしてしまいます。 どうか打開策を教えて頂けないでしょうか? お願します。 あるクリプトに下記の内容のスクリプトが埋め込まれていてそこで指定したフレームに飛ぶようにしています。 onClipEvent(enterFrame){ _x -= 5; if(_x <= 10){ _root.gotoAndPlay("bbb",11); } if(_x <= -600){ _x = 600; } }
- 締切済み
- グラフィックソフト
- 2つのswfファイルをつなげている場合の一括ローディング方法
お世話になります。 この質問の下の質問で、外部JPGファイル読み込みのローディング方法を質問しておられますが、そこを読んでも、外部swfファイル読み込みの際のローディング方法に応用することが出来ませんでした。 700Kのswfの最後のフレームに、 loadMovieNum("img/next.swf", 0); として、500kのnext.swfファイルとつなげています。 最初のswfファイルの1シーン目で、2つのswfを全て読み込み、再生時のつながりをスムーズにしたいと考えています。 最初のswfの1シーン目に、 ローディングオブジェクトを置き、 onClipEvent (load) { _root.stop(); par = 0; bar._xscale = 1; } onClipEvent (enterFrame) { par = parseInt((_root.getBytesLoaded() / _root.getBytesTotal()) * 100); if (par == 0) { par = 1; } else if (par >= 100) { par = 100; _root.gotoAndPlay("start"); } bar._xscale = par; } ローディングすると、フレームラベル「start」 に飛び、 そのフレームに置いているオブジェクトに onClipEvent (load) { par = 100; bar._xscale = 100; } onClipEvent (enterFrame) { _alpha -= 5; } を書き込んでいます。 そして、2シーン目に飛び、 2シーン目の最後のフレームに、 loadMovieNum("img/next.swf", 0); を置いてつなげています。 FLASH本を数冊持っているのですが、2つのswfを 同時にローディングする方法が載っておらず、 こちらに質問を書かせていただきました。 もしかしたらこの質問の下質問JEPファイルの ローディングと内容がかぶってるかもしれませんが、 よろしくお願い致します。 【制作環境】 Win XP FLAS MX
- ベストアンサー
- Flash
- Flash再生中につぎのフレームをLoadingしときたい
わたしのしたいことは Flashの再生中に次のフレームをloadingしときたいのです まずswfファイルの容量が約2MBあるため 完全にloadingしてから、表示するのに1分ぐらいかかるからです。 ですから、2MBを3分割しながら再生したいのです。 もちろん再生中はつぎのフレームをloadingしてスムーズに つなぎ目なく再生するのが目標です。 まずフレーム数が900あります。 3分割で10000/3=300づつ再生することにします。 まず最初は Now Loading※(1~300まで)→次に1~300まで再生(その間300~600までload中とする)→次に300~600まで再生(その間は600~900までloadする)→最後のフレーム900でstopとしたいです ※最初のみNow Loading画面でかまわない。それ以降 はつなぎ目なく再生。 今回はボタン等使わず単なるながれる動作です。 わかるかたよろしくおねがいします。
- ベストアンサー
- Flash
- now loding.......
onClipEvent (load) { total = _root.getBytesTotal(); } onClipEvent (enterFrame) { loaded = _root.getBytesLoaded(); percent = int(loaded/total*100); text = " "+percent+"%"; gotoAndStop(percent); if (loaded == total) { _root.gotoAndPlay(2); } } と、いうスクリプトが記述されているのですが、すべてダウンロードしないうちに再生してしまい、ナローバンドで見たときに、途中の動きがギクシャクしてしまいます。 このスクリプトをどういじれば解決するのでしょうか? ご教授くだされば幸いです。
- 締切済み
- Flash
- 再生しない?
何度もスミマセン。 こちらでなんだかんだと質問して その都度、解決してもらってます。 恐ろしい容量のゲームが完成間近となってきたのですが あと一歩の所で原因不明の病に悩まされています。 各フレーム、ボタン等に様々なスプリクトを盛り込み その都度時間のかかる書き出しでプレビューし バグやエラーを発見しつつ動作確認を行っている中、 何をした記憶もないのですが _root.gotoAndPlay("ats"); の命令を聞いてくれません。 これは、atsと名前の付けたフレームにジャンプするといった 比較的簡単な動作だと思うのですが落とし穴が発見できません。 しかも、今まで問題なく動いてたのにプレビューすると ジャンプはしているようですがPlayしてくれないのです。 まるで _root.gotoAndStop("ats"); をしたのか、はたまたジャンプ先で Stop(); しているのか必死で探しましたが そういう事をした記憶もなく何故急にそうなったかが分かりません。 しかも全部のジャンプがそうなったのではなく 部分的な現象なので手に負えません。 そろそろ完成に近づいているのでとても 諦めるにはつらいものがありましたので 懲りずに質問とさせていただきました。
- ベストアンサー
- Flash
- アクションスクリプトについて
今、毎月決まった日になったら表示させるというのをやりたくて がんばってみたのですがいまいちわかりません。 スクリプトは onClipEvent(load){ stop(); function update(){ var nowDate = new Date(); var Day = nowDate.getDate(); if (Day == 1){ this.gotoAndStop("today"); }else if(Day == 16){ this.gotoAndStop("today"); }else this.gotoAndStop("a"); } } onClipEvent(enterFrame){ update(); } こんな感じです。(まったく自身がありません。) いまいち変数のところがわかりません。オブジェクトの生成とか・・・ PCの日付の方は変えてありますが、表示がされません。 今後は「次回の何回目は後何日」って感じに出来たらと思っています。 これについてもよかったら何かアドバイスお願いします。
- ベストアンサー
- グラフィックソフト
お礼
ご回答ありがとうございます。おかげさまで無事かいけつしました。補足させていただきますと、“フレーム3 にSharedObjectのスクリプトを書いたムービークリップ” ということでしたがフレーム1に移動し逆に"Now load" を1フレームから2フレームへ移動することにしました。 (ん?タイムフレームは上から順番に処理するのか?その場合は意味が無い?気力をつかいはたしたので、試してません)一応成功ですので感謝、感謝です。 技術的な話とはべつになりますが、ホームページというのは人にあきられないように作るのが自分の哲学(笑)としているため同じ絵をなるべく避けるべく今回みたいな事態 になっています。今後もさらにスクリプトを追加していかなければならないアイディアがあるので、次回も目にとまったら聞いてやってください。ご苦労おかけします、改めて感謝とさせていただきます。