- ベストアンサー
nowloadingと一緒に動くムービーについて
winXP flash8を使用しております。 左から右にビューっと伸びるローディングバーがあったとして そのローディングバーの上に右から左に動くムービー(例えば人間など)を配置したいのです。 ローディングバーと上のムービーの幅は同じと仮定します。 ローディングバーが100%(右端)になった時に そのムービーも左隅に移動するものが作りたいのです。 人← ← ← ← ← ←人 [≡≡≡≡≡≡≡≡≡≡≡] 100% こんな感じでしょうか?・・・ よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#1 です。 > 人ムービーの方が先に左に着いてしまい、 > ローディングバーはだいぶ後になって右までつきます。 意味を良く理解して考えてくださいね。 繰り返します。 >> 変数 par が 0~100 まで随時加算されます。 >> この 変数 par はロードされたパーセンテージに見立てています。 >> そのパーセンテージ分, >> 「hito」はムービークリップ「jinsei」の中を動くのです。 ロードされた パーセンテージ を par の部分にあてはめないと,当然ずれますよ。 #1 のスクリプトは, 単純に par を 2 ずつ加算しているだけなのですから。 この par の部分をローディング計算によって計算された数値に置き換えなければなりません。 =================== 本当は以上で終わろうかと思いましたが, 寝そびれてしまったので,大サービスです。 「Director風プリローダー」 をステージ上にドラッグ&ドロップしますよね。 その「Director風プリローダー」に 「A」 というインスタンス名を付けてください。 次に「A」をダブルクリックしてムービークリップ内の編集に入ります。 「A」の中の黒いバーの左半分はさらにムービークリップになっています。 そのムービークリップに「B」というインスタンス名を付けてください。 用意はこれで良いのですが, スクリプトを確認するため「B」もダブルクリックして, その中の編集に入ってみてください。 そこにスクリプトが書かれているのです。 引用↓ ---------------------------------- this.onEnterFrame = function() { nParcent = (_root.getBytesLoaded()/_root.getBytesTotal())*100; _xscale = nParcent; if (_xscale == 100) { _root.play(); } }; _root.stop(); ---------------------------------- この nParcent を par として当てはめてくださいということです。 スクリプトが確認できましたら, メインムービーのタイムラインの編集にもどってください。 上のスクリプトを書き換える必要は全くありません。 確認してみるだけです。 そして, #1で書いたスクリプトを次のように書き換えればOKです。 --------------------------------------- // ムービークリップ「jinsei」 の横幅を記録 var jinW = _root.jinsei._width; // 1フレーム進む時間ごとに毎回実行 _root.onEnterFrame = function() { _root.jinsei.hito._x = -_root.A.B.nParcent*jinW/100; }; --------------------------------------- 理解をすれば簡単な事なのですよ。 ロードのスクリプトは人によって違うためわからないので, それはどうでも良いこととして, 変数 par を加算するスクリプトまで入れたのが, #1の回答なのです。
その他の回答 (1)
簡単なサンプルで説明します。 新規ドキュメントを作成してみてください。 まず, ローディングバーと同じ長さの線をステージ上に引きます。 ローディングバー は現在ないので,適当な長さの線でかまいません。 こんな感じ↓。 ━━━━━━━━━━━━━━ ←線 ┌─────────────┐←バー └─────────────┘ (仮にある場合) 線を「修正」→「シンボルに変換」でムービークリップにします。 その変換するときの 基準点 を右下にしておいてください。 (右中央でも良いですが。) ////////////////////////////////////////////// タイプ(T): ○ムービークリップ 基準点(R):□□□ ○ボタン □□□ ○グラフィック □□■ ////////////////////////////////////////////// そして,ムービークリップになった線にインスタンス名を付けます。 この説明では 「jinsei」 というインスタンス名にしておきます。 そこまでできたら, 「jinsei」 をダブルクリックして,ムービーリップ内の編集に入ります。 ムービークリップ内の編集に入ると, 1つだけのレイヤーに,線がすでに描いてあると思いますから, レイヤーを上に1つ増やして,そのレイヤーに「人」を描きます。 タイムラインを図示すると次のような感じです。 1 レイヤー 筆・・|●| ←人 レイヤー 筆・・|●| ←線 また, ムービークリップ内のステージ上を図示すると次のような感じです。 ─────────────人 ━━━━━━━━━━━━━━ ←線 ※「人」の左にある線 ( ── ) は無視してください。 ここの紙面のレイアウト上入れただけで, 本来何もないはずのエリアです。 「人」はとりあえず,本当に「人」という文字でかまいません。 「人」の右側の足は線をはみださないようにしてください。 そして「人」をムービークリップに変換します。 この場合の基準点は,「中央」にしてください。 ////////////////////////////////////////////// タイプ(T): ○ムービークリップ 基準点(R):□□□ ○ボタン □■□ ○グラフィック □□□ ////////////////////////////////////////////// そしてこの「人」ムービークリップにインスタンス名を付けます。 この説明では 「hito」 というインスタンス名にしておきます。 ここまでできたら, 何も無い所をダブルクリックして,メインムービーのタイムラインの編集に戻ります。 メインムービーのタイムラインも2フレームにしてください。 1 レイヤー 筆・・|○| レイヤー 筆・・|●| ←「jinsei」 そして, 新しく作ったほうのレイヤーを選択して, 次のスクリプトを書きます。 --------------------------------------- // ムービークリップ「jinsei」 の横幅を記録 var jinW = _root.jinsei._width; // // パーセンテージの値の初期値 var par = 0; // // 1フレーム進む時間ごとに毎回実行 _root.onEnterFrame = function() { //もしパーセンテージの値が 100 未満であれば if (par<100) { // パーセンテージの値に 2 をたす par += 2; } // // そして「jinsei」の中の「hito」の座標を動かす _root.jinsei.hito._x = -par*jinW/100; }; -------------------------------------- そして, 「制御」→「ムービープレビュー」です。 「hito」が線の右端から左端まで動くと思います。 わかりますでしょうか。 変数 par が 0~100 まで随時加算されます。 この 変数 par はロードされたパーセンテージに見立てています。 そのパーセンテージ分, 「hito」はムービークリップ「jinsei」の中を動くのです。 線は不要でも残してください。 最初のムービークリップの横幅(変数 jinW )を算出するときに必要です。 見えて困る場合は,透明な色の線にしておけば良いですね。 こんな感じで作れば簡単にできます。
お礼
sassakunさん、本当にていないなご説明ありがとうございました。 上記のご説明で、人は右から左に動きました。 そこで http://f-site.org/articles/2004/03/18005544.html の[1.Director風NowLoading]と一緒に使ってみたのですが、 人ムービーの方が先に左に着いてしまい、ローディングバーはだいぶ後になって右までつきます。 ステージはこうです。 レイヤー1 筆・・|○| ←「教えていただいたスクリプト」 レイヤー2 筆・・|●| ←「jinsei」 レイヤー3 筆・・|●| ←「1.Director風NowLoading」 レイヤー4 筆・・|○|●| ←「重たい画像」 ↑きっとなにかおかしいんですね。 それで、[ムービープレビュー]→[表示]→[ダウンロードのシュミレート] で見ると、人が左に先に着き、バーはまだローディング中なのです。 私のやり方のどこかが間違っていると思うのですが、よろしくお願いいたします。
お礼
sassakunさん、本当にありがとうございました。 私のせいで寝そびれてしまったのですね。 完璧に出来ました。 いやー、私、数学に弱いというかなんといいますか・・・ しかしsassakunさんのご説明でこの箇所はココに関係しているのだということがわかってきました。 本当に助かりました。 ありがとうございました。