• 締切済み

プリローダーで、画像を下から上に表示する方法

プリローダーというと普通はバーで0%から100%に近づくにつれて 左から右に伸びるのがよくあるパターンですが バーの代わりに何らかの画像が下から上に向けて現れてくるように するにはどのようにすれば宜しいのでしょうか? バーをpngで読み込んだ画像に変えて _root.xxxx._xscale = percent;xscaleを _root.xxxx._yscale = percent;に書き換えても 全く反映されません。 ちなみにMX2004を使っています。 あと、静止画像とはちょっと違うかもしれませんが http://www.flashcomponents.net/upload/samples/431/index.html 上記のサイトのように下から上に上がっていくのは どのようなスクリプトになっているのでしょうか?

  • Flash
  • 回答数2
  • ありがとう数4

みんなの回答

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

#1 です。 > 上記にしてありますが、実際にアップするとプリローダーが現れてくれません。 > 修正点はどの辺りにありますでしょうか? スクリプトは大変な状態です。 しかし,大変な状態なのはわかっていて, あえてそのままのスクリプトを記述(コピペ)し, 実際に重めのファイルを作成して試してみましたけど画像はちゃんと上に上がりましたよ。 プリローダとしては成り立っていませんが, ロードする割合に対しては「png_mc」が上がることは上がります。 その上がり方は良いか悪いかは私が判断するところではないので別にして, 「png_mc」が上がることだけは問題なしだと思います。 スクリプトは大変な状態なのは置いておいて, プリローダーが現れない原因ですが, これは様々なことが考えられますので特定できませんし, 考えられる以外に原因があるのかもしれません。 ファイル容量はちゃんと重い物を作成しましたか? 回線速度によるので何とも言えませんが, 100KB とか 200KB とか,そんな軽いファイル(SWF)だと, 0.1秒くらいでロードされてしまうかもしれませんよ。 アップロードした SWF のキャッシュは1回閲覧する度に消していますか? たとえ 10MB くらいのファイル(SWF)を作成したとしても, 2回目の閲覧以降,ブラウザはキャッシュを参照しますから, キャッシュを消さないと一瞬でロード完了してしまいますよ。 ActionScriptの修正点よりもまず, そもそも, 画像をアップロードして実験するところが間違っているように思います。 プリローダを試す場合は,アップロードするのではなく, 作成したドキュメントを開いた状態で, 「制御」→「ムービープレビュー」 これでムービーがプレビューできますから, そのムービープレビューの画面で 「表示」→「プロファイラ」 にチェックを入れて, 「表示」→「ダウンロードのシミュレート」 にチェックを入れます。 これでダウンロード状況がシミュレーションできます。 回線の設定を変更する場合は, 「表示」→「ダウンロードの設定」 で, 既存の設定回線から選択するか自分で回線状況を作成するかします。 アップロード後の動作確認も必要ですが, プリローダに関しては,アップロードしてしまうと動作確認ができない(しにくい)と思います。 ===本題とはあまり関係のない補足======== 「png_mc」 が上に上がるのとは関連しないことも含めて, 補足のスクリプトに注釈行を入れてみました。 画像が上がる部分ではなくそれ以外の部分で, どこが間違っているか,よく観察して考えてみてください。 なお,インデントに全角空白文字を使用しているため, このままのコピペでは使用できません。 ///////////////////////////////////////////////////////// // 1フレーム進む時間ごとに毎回毎回実行 _root.onEnterFrame = function():Void {   // 全フレーム数 と ロードされたフレーム数 が等しいとき   if (_totalframes == _framesloaded) {     // フレームラベル 「2」 に進めて再生(★フレームラベル?)     gotoAndPlay("2");   }   // 変数 total に ムービーの全バイト数を取得   total = _root.getBytesTotal();   // 変数 loaded に ムービーのロードされたバイト数を取得   loaded = _root.getBytesLoaded();   // 変数 percent にロードされたパーセント(整数)を取得   percent = Math.floor(loaded/total*100);   // 変数 time にムービー開始からの秒を取得(★意味不明)   time = Math.floor(getTimer()/1000);   // 「png_mc」 の y 座標を   // ロードされたパーセンテージ×2ずつ下から上げる   _root.png_mc._y = 200-percent*2;   // 表示を即更新(★全く意味なし)   updateAfterEvent(); }; // 再生停止 stop(); ///////////////////////////////////////////////////////// 間違っていると推測される部分や, 間違ってはいないけれど,あまり相応しくないと思った部分などを書き替えてみました。 (繰り返しますが,書き替えても 「png_mc」 が  正常に上に上がるというわけではありません。   「png_mc」 以外の部分の書き替えです。) 全角空白文字インデントは付けていませんのでコピペできます。 /////////////////////////////////////////////////////// // 再生停止(☆まず先に stop() です) stop(); // 1フレーム進む時間ごとに毎回毎回実行 _root.onEnterFrame = function():Void { // 変数 total に ムービーの全バイト数を取得 total = _root.getBytesTotal(); // 変数 loaded に ムービーのロードされたバイト数を取得 loaded = _root.getBytesLoaded(); // 変数 percent にロードされたパーセントを取得 percent = Math.floor(loaded/total*100); // 変数 time にムービー開始からの秒を取得 // (★ 意味不明ですが残しました) time = Math.floor(getTimer()/1000); // 「png_mc」 の y 座標を // ロードされたパーセンテージ×2ずつ下から上げる _root.png_mc._y = 200-percent*2; // ロードされたバイト数 が 全バイト数 以上になれば if (loaded>=total) { // フレーム2 に進めて再生(☆フレーム2でしょう?) gotoAndPlay(2); // この onEnterFrame を削除(☆☆絶対必要) delete _root.onEnterFrame; } }; /////////////////////////////////////////////////////// 最後の,   // この onEnterFrame を削除(☆☆絶対必要)   delete _root.onEnterFrame; に関してですが,これを入れないと ,   // フレーム2 に進めて再生(☆フレーム2でしょう?)   gotoAndPlay(2); これが1フレーム進む時間ごとに毎回毎回実行され続けます。 つまり フレーム2 に行きつづけるため,次のフレーム(フレーム3 以降)に進めなくなります。 それと最初のスクリプトの途中の,   // 表示を即更新(★全く意味なし)   updateAfterEvent(); ですが, Flash は基本的に自動で1フレーム進む時間ごとに毎回毎回表示を更新しています。 だからアニメーションするのです。 もしこれが必要であるとするなら,全てのフレームに書く必要が出てきます。 updateAfterEvent() は1フレーム進む時間と時間との間に変化が起こるときに使う物で, その場合でも普通は必要ありませんし使いません。 あえて「表示を更新したいときのみ」に使います。 たとえば, マウスをダラーーーーっとドラッグしたとき, マウスの座標は1フレーム進む時間とは関係なく変更されます。 代替カーソルなどを使った場合で,1フレーム進む時間ごとに表示更新すると, なんとなくカーソルの動きが遅く感じたりカクカクして(飛び飛びで)動くように見えることがあります。 「1フレーム進む時間とは関係無しで何かが起こる場合で,  なおかつ  その微妙なタイミングで起こる何かに即表示を対応させる場合」 そういうときに使う物です。 ===別件=================== とにかく, 当たり前ですがプリローダは回線によってその動きが大きく変わります。 またキャッシュに残る残らないによっても全く動きが変わります。 回線や状況によってなるべく変えたくない場合は, 次のページを参考にしてみてください。 「QNo.4071675 ローディングバーをゆっくりみせる方法」 http://okwave.jp/qa4071675.html

cocoron24
質問者

お礼

本日作り直してみました。 そうですね、確かにフラッシュで描いた四角は 上に“上がり”ました。 もうちょっと自分で工面して考えてみます。 このたびは非常にためになる情報、ご意見等ありがとうございます!

cocoron24
質問者

補足

非常にご丁寧な返信、ありがとうございます。 解り易くて助かります! 再考してから後日改めてお礼差し上げます。

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

元がどうなっているのかわかりませんから, どこをどうすれば良いというようなかなり具体的な回答はできませんが。 >_root.xxxx._xscale = percent;xscaleを >_root.xxxx._yscale = percent;に書き換えても > 全く反映されません。 _xscale は 文字通り x方向のスケール(大きさ)プロパティです。 ちなみに 100 をオリジナルの大きさとしたときの数値です。 _yscale も 文字通り y方向のスケール(大きさ)プロパティです。 これも 100 をオリジナルの大きさとしたときの数値です。 とりあえず, pngをムービークリップに変換してインスタンス名を何か付けて, そのムービークリップの _y (y座標)プロパティ を, percent に比例した y座標 に移動させなければならないと思います。 png をムービークリップにしたものの インスタンス名 を 「png_mc」 とするならば, _root.png_mc._y = 100-percent; とか, _root.png_mc._y = 200-percent*2; とかです。 100 や 200 や 2 などは, 作成していらっしゃるものの状態や画像の大きさや好みなどによって変わります。 > あと、静止画像とはちょっと違うかもしれませんが > http://www.flashcomponents.net/upload/samples/431/index.html > 上記のサイトのように下から上に上がっていくのは > どのようなスクリプトになっているのでしょうか? 基本的に上のスクリプトと同じでしょう。 ムービークリップ内に png を置くのではなく, 波打つようなアニメーションを作成しておいて, そのアニメーション入りムービークリップの y座標 を小さくして入ってるのだと思います。 アニメーション入りムービークリップにはマスクをかけて, ○の部分だけ表示するようにしているのかもしれませんし, 黒い背景に○の穴を開けて, その後(下レイヤー)にアニメーション入りムービークリップを置いているかもしれません。 その辺は,スクリプトとはあまり関係ないと思います。

cocoron24
質問者

お礼

ありがとうございます。 2コマ目から動画を再生させたいと考えています。 プリローダで出したい絵は縦のサイズが200pxなので 1コマ目のアクションスクリプトは _root.onEnterFrame = function():Void { if (_totalframes == _framesloaded) { gotoAndPlay("2"); } total = _root.getBytesTotal(); loaded = _root.getBytesLoaded(); percent = Math.floor(loaded/total*100); time = Math.floor(getTimer()/1000); _root.png_mc._y =200-percent*2; updateAfterEvent(); }; stop(); 上記にしてありますが、実際にアップするとプリローダーが現れてくれません。 修正点はどの辺りにありますでしょうか?

関連するQ&A

  • 画像を中央にズームさせるには

    Flash超初心者です。 小さな画像が2、3個横に並んでいて、一つをクリックすると中央にズームし、他の画像をクリックすると先にズームされていた画像がもとの小さな画像に戻るようにしたいです。 http://www.suntory.co.jp/sho-chu/srk/urabanashi.html 過去ログに参考になるものがあり http://oshiete1.goo.ne.jp/kotaeru.php3?q=1444680 少し変更して下記のようにしました。 onClipEvent (load) { yScl = this._yscale; xScl = this._xscale; yPos = this._y; xPos = this._x; } on (rollOver) { this.onEnterFrame = function() { this._yscale *= 1.1; this._xscale *= 1.1; if (this._yscale>=yScl*2.5) { this._yscale = yScl*2.5; this._xscale = xScl*2.5; this.swapDepths(++_root.Depth); } }; } on (rollOut, dragOut) { this.onEnterFrame = function() { this._yscale *= 0.9; this._xscale *= 0.9; this._y += (yPos-this._y)*0.3; this._x += (xPos-this._x)*0.3; if (this._yscale<=yScl) { this._yscale = yScl; this._xscale = xScl; this._y = yPos; this._x = xPos; this.onEnterFrame = null; } }; } でも、これは画像のある同じ場所でズームするので画面の中央でズームさせたいです。 座標を指定すればいいという理屈はわかるのですが、どの部分にどういASを入れたらいいのがわかりません。 また、上記のASでは、ズームしたあとマウスがオブジェクトからはずれると画像がもとの大きさにもどってしまいます。 on (rollOut, dragOut)と入れているからでしょうが、では何を入れたらいいの悩んでしまいましてご相談させていただきました。 どなたかご教授ください。よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • suzuka rollOverで画像が徐々に拡大する

    マウスがその画像の上に乗るとずずずっと画像がある倍率まで大きくなり、 その画像の上を離れたとたんにずずっと元のサイズに戻る記述はいかようにするのでしょうか。 フレームアクションにて img_flag = false; my_img.onRollOver = function(){  if(!img_flag){   my_img._xscale = my_img._yscale = 130;  }else{   my_img._xscale = my_img._yscale = 100;  }  img_flag = !img_flag; }; 上記だと画像の左上から右下に向かってズームしてしまいますし、 何よりずずずっという動きがありません。 お時間のあるかたなにとぞお願いします。

    • ベストアンサー
    • Flash
  • scriptを使いまわしたい。

    見よう見まねで下記のようなスクリプトを記述しています。 複数のムービークリップに設定していますが、編集するのにかなり手間がかかります。うまく使いまわす方法はございませんでしょうか…。 また、記述の仕方にも問題等ありましたらご指南ください。。 onClipEvent (load) {  sx_move = Math.floor(Math.random() * -10) - 3;  sy_move = Math.floor(Math.random() * 6) - 3;  s_scale = Math.floor(Math.random() * 40) + 40;  _xscale = (s_scale);  _yscale = (s_scale);  n = 1; } onClipEvent (enterFrame) {  _x += (sx_move);  _y += (sy_move); } on (rollOver) {  mx.behaviors.DepthControl.bringToFront(_root);  this.onEnterFrame = function () {   n += 1;   _x -= (sx_move);   _y -= (sy_move);   if (n < 20) {    _x = (_x + 25) / 1.5;    _y = (_y + 12) / 1.5;    _xscale = (_xscale + 50) / 1.5;    _yscale = (_yscale + 50) / 1.5;   } else if (n < 40) {    stop();   } else if (n < 50) {    _x += 13;    _y += 13;    _alpha -= 20;    _xscale = (_xscale) / 1.2;    _yscale = (_yscale) / 1.2;   } else {    stop();   }  }; }

    • ベストアンサー
    • Flash
  • ボタンを押してもすぐ戻ってしまう・・・。

    1フレーム目に、 onEnterFrame = function():Void { if (_totalframes == _framesloaded) { gotoAndStop("snap"); } total = _root.getBytesTotal(); loaded = _root.getBytesLoaded(); percent = Math.floor(loaded/total*100); _root.bar_mc._xscale = percent; }; stop(); と記入し2フレーム目のフレームラベルをsnapに。 2フレーム目には、画像と次のフレームにいくボタンが置いてあります。 ボタンには、 on(press){ gotoAndStop(3); } と書いてあるのですが。 このボタンを押すと、確かに3フレーム目にいくのですが、すぐ2フレーム目に戻ってしまうんです。 初めてローディングバーをつけてみたので、間違いだらけかもしれないですがどうすればいいか教えてください><

    • ベストアンサー
    • Flash
  • 上辺は位置固定しつつ、四角を描く!

    上の辺の位置は変えずに下の辺が下がりながら透明度50の四角をフレーム毎に(EnterFrameで)描画したいです。 どなたか教えていただけないでしょうか。 ※以下のASでは四角が移動してしまいます。 onClipEvent(load){ _yscale_max=100; _yscale = 5; _root.abc.beginFill (0x000000, 50); _root.abc.moveTo (100, 100); _root.abc.lineTo (300, 100); _root.abc.lineTo (300, 300); _root.abc.lineTo (100, 300); _root.abc.endFill (); } onClipEvent(EnterFrame){ _yscale += 5; if(_yscale < _yscale_max){ _root.abc._yscale =_yscale; } if(_yscale > _yscale_max){ _yscale =_yscale_max; } }

    • ベストアンサー
    • Flash
  • attachMovieで表示した複数のMCが一瞬ずつしか表示されません

    attachMovieでMCを複数表示しているのですが、 ランダムに表示したMCが一瞬ずつしか表示されません。 やりたいことは、aaaというMCが横位置と大きさがランダムで表示され、 下にまっすぐ落ちるという動きです。 こちらの記事を参考に作成しました。 http://oshiete1.goo.ne.jp/qa2500105.html -------------------------------------- // 深度の初期値を設定 var dep = 0; // 大きくなる限度を設定 var mag = 80; _root.dep++; _root.attachMovie("aaa", "myMC"+_root.dep, _root.dep); //座標を指定 _root["myMC"+_root.dep]._x = Math.random()*Stage.width; //下に落ちていく _root["myMC"+_root.dep]._y += 10; // 大きさを指定 var my_scale = Math.random()*_root.mag; _root["myMC"+_root.dep]._xscale = my_scale; _root["myMC"+_root.dep]._yscale = my_scale; -------------------------------------- ランダムに表示はできるのですが、すばやく消えて、すぐに次のMCが 表示されてしまいます。 同じ深度に表示されているように見えますが、 _root.dep++; で 深度は変わっているはずなんですが…。 ちなみに stop(); を入れたらひとつだけ表示されましたが 下に落ちていきませんでした…。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 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
  • 画像の下の余白

    下記のソースの場合、画像の下に余白が出来てしまうのですが、どうすれば画像の下と『<div class=bar>画像</div>』の上の余白を削除してくっ付けるられるのでしょうか? 【index.html】 <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> <title>例題</title> <link rel="stylesheet" type="text/css" href="design.css" media="all"> </head> <body> <img src="gazou.jpg" class="name" width="1024" height="768"> <div class="bar">画像</div> </body> </html> 【design.css】 .bar{ background-color: #ff0000; }

    • ベストアンサー
    • HTML
  • 画像を取り込む際の画像表示についてご教示下さい。

    画像を取り込む際の画像表示についてご教示下さい。 画像を取り込む際には、エクセル、ワードのメニューバーの挿入→図→と進みます。 リムーバルデスクからであったり、PC本体からであったりするのですが、その際の画像の表示がまちまちになります。 例えば、縮小表示でしかも最近撮影したものが一番上に来るようにするのにはどうすればよいのでしょうか?? いつも下になり、一回ずつ表示の設定をしなおし、かなり手間取ります。 よろしくお願い致します。

  • 背景画像の表示について

    こんにちは。 初心者ですが、Yahooのジオシティーズでホームページを作っています。 今、頭を悩ませている要因が、背景画像についてです。 自作した画像があるのですが、それをアップデートしたURLでは、画面に収まりきるサイズだったのです。 でも、いざトップページに配置したら、なぜか勝手に拡大表示されている上に、スクロールバーが出ていません。 おかげで上下左右が見切れ、画像も荒くなってしまいました。 さらに、画像の繰り返しをしない設定(background-repeat:no-repeat;)をしたにもかかわらず、反映されていませんでした。 HTMLタグでもスタイルシートでも試してみましたが、同じような結果です。 イメージで配置したところ、サイズは同じように拡大されてしまいましたが、スクロールバーは出ました。 私の理想とする設定は、 【作ったままのサイズで  右端中央にひとつだけ表示し  画面サイズを超えてしまったパソコン(小さいノートパソコンなど)ではスクロールバーが表示される】 といったところでしょうか。 初心者なりに勉強して、HTMLやスタイルシートについては多少なりとも理解できるつもりです。 どうか、ご教授願います。

専門家に質問してみよう