Math.floorがうまく動かない?小数点以下まで表示されてしまう

このQ&Aのポイント
  • Flase8初心者がNowLoading画面に%を表示しようとしたが、Math.floorがうまく動かないため、小数点以下まで表示されてしまう。
  • 質問者はスプリクトを使用して、ローディングの進捗状況を表示しようとしているが、Math.floorが正しく動いていないため、小数点以下まで表示されてしまう。
  • 間違いやエラーはないか確認してほしい。
回答を見る
  • ベストアンサー

Math.floorがうまく動きません…

Flase8初心者です。 NowLoading画面に%を表示させようと思いスプリクトを書いたのですが、 Math.floorがうまく動かないのか小数点以下まで表示されてしまいます。  スプリクトは下記のものです。 this.onEnterFrame = function() { Parcent = (_root.getBytesLoaded()/_root.getBytesTotal()*100); Parcent_txt.text =Math.floor(Parcent); if (Parcent == 100) { _root.play(3); } }; _root.stop(); どこかに間違いがあるのでしょうか? 回答、よろしくお願い致します。

  • Flash
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
noname#35109
noname#35109
回答No.1

よくわかりません。 その,Mafh.floor に "関しては" 正常に動作します。 その,スクリプトを書かれた場所が,_root のタイムラインなのか ムービークリップのタイムラインなのかは,よくわかりませんが, そのスクリプトを書かれた階層内に 「Parcent_txt」という "インスタンス名" のダイナミックテキストを用意すれば, ちゃんと整数が表示されます。 「ムービープレビュー」で,プレビューされている画面から 「表示」→「ダウンロードシュミレート」で状況を色々変えて何度も実験しました。 ムービーは正常に動作しないかもしれませんが, やはり Mafh.floor に "関しては" 正常に動作します。 「Parcent_txt」という "インスタンス名" のダイナミックテキストを, スクリプトを書いた階層に置いていますか? 「Parcent」という "変数名" のダイナミックテキストを,置いた場合は, 当然,小数点以下は切り捨てられません。 ------------------------------------------ 以下は Mafh.floor に関してではありませんが, スクリプトは次のように訂正,または付け加えをした方が良いとは思います(思うだけです)。 // とりあえずストップ _root.stop(); this.onEnterFrame = function() { Parcent = (_root.getBytesLoaded()/_root.getBytesTotal()*100); Parcent_txt.text = Math.floor(Parcent); if (Parcent>=100) { // ↓変更 _root.gotoAndPlay(3); // ↓ _root のタイムラインの場合は付け加え delete (this.onEnterFrame); } }; play(3) のパラメータ 3 は,何の意味も持たないので,無視されます。 play(3) ではなく,gotoAndPlay(3); ではないでしょうか。 また, スクリプトを書かれた場所がよくわかりませんが, もし _root のタイムラインでしたら, delete (this.onEnterFrame); で その onEnterFrame は消しておいた方が無駄なCPUを使いません。 ムービークリップのタイムラインで,なおかつそのムービークリップはロード完了後すぐにステージから表示されなくなるのでしたら,この delete (this.onEnterFrame); は不要です。

muru_muru
質問者

お礼

詳しく説明いただき、ありがとうございます。 おかげで原因がわかりました。 原因はインスタンス名が書かれていなかったためでした。 初歩的なミスでした…すみません。 スプリクトのご指摘もとても参考になりました。 本当にありがとうございました。

関連する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でプリローダーを作成しています。 これまでは100%読み込むとムービーを再生するという、 よくあるタイプのものを使用していましたが、 今回は全体の半分、または指定のバイト数を読み込んだら再生するものにしたいと思っています。 そこで自分でスクリプトを書き換え、試行錯誤してみましたがどうしてもうまくいきません。 【もとのスクリプト(正常に動作します)】 ================================================================== this.onEnterFrame = function() { _root.stop(); nParcent = (_root.getBytesLoaded() / _root.getBytesTotal() )*100; this.nParcent_txt.text = Math.round(nParcent)+"%"; if ( nParcent == 100) { _root.play(); } } ================================================================== 【書き換え後のスクリプト】 ================================================================== this.onEnterFrame = function() { _root.stop(); halfSize = _root.getBytesTotal() / 2; nParcent = (_root.getBytesLoaded() / halfSize )*100; this.nParcent_txt.text = Math.round(nParcent)+"%"; if ( nParcent == 100) { _root.play(); } ================================================================== 書き換えた後の方を実行すると、 200%まで読み込んでムービーがストップしてしまいます。 ActionScript初心者でどこが間違っているのか見当がつかず困っています。 ご回答よろしくお願いします。

    • ベストアンサー
    • 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
  • 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を追加したところ、 埋め込んであるFlashビデオの音声が途切れ途切れで再生されてしまいます。 "下記の内容です。 _root.stop(); this.onEnterFrame = function() { partNumber = (_root.getBytesLoaded()/_root.getBytesTotal())*100; partNumber_txt.text = "Loading " + Math.round(partNumber) + "%"; if (partNumber == 100) { //clearInterval(intervalID); _root.play(); } }; function startMC(){ spin_mc._rotation += 30; } var intervalID = setInterval(startMC,50); "ここまでです。 (同時にミュージックも埋め込んで再生していますが、こちらの音は問題なし。) パブリッシュ設定をいくつか変えてぱブリッシュを試したのですが、上手くいかず、 プログレスバーのActionScriptを削除しパブリッシュすると問題なくFlashビデオの音声も再生されます。 この症状には、どういった問題が考えられますでしょうか? ご教授頂けますと幸いです。何卒、よろしく願い致します。

  • mcのスクロール

    以下のムービーを作ったのですが動作がおかしいです。 ----------------ステージ------------- | [ボタン]  [photo(mc_0とmc_1)] | ------------------------------------- 【ムービーの説明】 load時:photo(mc)がmcPos[-203]の位置に移動 enterframe:ボタンにmouseoverでそれぞれの座標に移動 ※photoは同じものを二枚重ねて、それぞれにmc_0とmc_1とインスタンス名をつけて、異なるスピードで移動。「//」で斜めにマスクを作っているので、ひとつの写真が斜めにずれながら移動しているように見える 【おかしな動作】 loading動作してない状態(FlashMXで単にCtrl+Enter)した状態だと再生時に「mcPos」の「-203」にphotoは移動するのですが、loadingを動作させると再生時にphotoが移動しない。ボタンにonRollOverしたときには、ちゃんとそれぞれの座標に移動します。ただ再生時に「mcPos」の「-203」に移動しない。 /---rootの1フレーム目(ローディング)---/ this.stop(); defWidth = bar._width; if (getBytesLoaded() == getBytesTotal()) {gotoAndStop("start");} this.onEnterFrame = function(){ per = Math.floor(getBytesLoaded()/getBytesTotal()*100); loading = "Now Loading..."+per+"%"; bar._width = defWidth*(per/100); }; /---rootの2フレーム目---/ this.stop(); mc_0.setMask(mask_0); mc_1.setMask(mask_1); mcPos=new Array(); mcPos=[-203, -589, -1361, 183, -975, -1747]; this.onLoad=function(){a=0;}; this.onEnterFrame = function(){ mc_0._x += (mcPos[a]-mc_0._x)/1.4; mc_1._x += (mcPos[a]-mc_1._x)/2; }; /---rootの2フレーム目(インターフェイス)---/ ボタン(mc)の編集画面 on(rollOver){_root.a = 0;gotoAndStop("top");} on(rollOut){gotoAndStop("out");} on (release, releaseOutside){getURL("index.html");}

    • ベストアンサー
    • Flash
  • Flash:外部JPEG読み込み待ちについて

    こんにちは。どうぞよろしくお願い致します。 Flash MX2004使用です。 外部JPEGを4枚読み込ませ、 4枚全部読み込み終わるまで再生をストップさせる またはローディング画面を表示する という事をやりたいのですが、なかなかうまくいきません。 現在の状況は、1フレーム目に this.ph01.loadMovie("01.jpg"); this.ph02.loadMovie("02.jpg"); this.ph03.loadMovie("03.jpg"); this.ph04.loadMovie("04.jpg"); 「ph01」に onClipEvent (load) { this._parent.stop(); } onClipEvent (data) { if (this.getBytesTotal()>0 && this.getBytesTotal()<=this.getBytesLoaded()) { if (this._parent.ph02.getBytesTotal()>0 && this._parent.ph02.getBytesTotal()<=this._parent.ph02.getBytesLoaded()) { if (this._parent.ph03.getBytesTotal()>0 && this._parent.ph03.getBytesTotal()<=this._parent.ph03.getBytesLoaded()) { if (this._parent.ph04.getBytesTotal()>0 && this._parent.ph04.getBytesTotal()<=this._parent.ph04.getBytesLoaded()) { this._parent.play(); } } } } else { this._parent.stop(); } } と書いています。 何分ActionScriptはまだまだサンプルの真似事とちょっと手を加える程度の知識しかないもので、上に書いた物もものすごい間違い方をしているかもしれません(恥) 読み込むJPEGファイルは大したサイズではないので、一般的な回線速度なら普通に再生しても読み込みが再生に追いつかないという事もないのですが、先方の指示で絶対に!!全ての画像を読み込み終わるまで再生しないように!!と言われています。 どなたか、どうかお力を貸して頂けないでしょうか。 よろしくお願い致します。

    • ベストアンサー
    • Flash
  • 【読み込み時間orロード画面】

    一番最初に待ち時間に出せる アニメの作り方について質問を投げさせて貰います。 よくある待ち時間画面ですが、 他のサイトを参考にソースをコピーして 動作を確認しておりましたが、 どうしても画面がまっしろなままから 全部読み込んではじめて動くみたいで、 困っております。 1フレーム目にある、 ムービークリップにこのようなソースを書きました。 onClipEvent (load) { stop(); } onClipEvent (enterFrame) { if (100 == Math.floor(_root.getBytesLoaded()/_root.getBytesTotal()*100)) { gotoAndPlay(2); } } 【フレーム2】には、【フレーム3】に飛ぶボタンを用意してます。 一度、【シーン1】ですべてのデーターを読み込んで 【フレーム2】に読み込み完了!と表示させ、 【フレーム3】に飛んで初めて動くようにしたいのですが、 いったい、ロード時間が最初に出てこない理由は なにか、アドヴァイスお願いします。。。

    • ベストアンサー
    • Flash
  • 一つのレイヤーのみフィルターをかける方法

    FLASH8です。 写真の自動スライドショー的なものを作成しようとしています。 あるサイトにあった無料スクリプトをコピペし、表示は問題なくできるようになりました。 そのスクリプトは外部から写真を読み込み、画像と画像のフェードイン・アウト時にブラーエフェクトでつないでいくものです。(下記参照) これにレイヤーを一つ追加し、追加したレイヤー(上階層)はずっと表示させておきたいのですが、そのレイヤーの画像にまでエフェクトがかかってしまいます。 エフェクトをかからないようにする方法はありませんか? ちょっと説明が足り無いかもしれないんですが、何の情報を言ったらいいか分からないので、よければ補足要求いただければ回答いたします。 よろしくお願い致します。 ============================== import flash.filters.BlurFilter; var picsArray:Array = new Array("flash/01.jpg","flash/02.jpg","flash/03.jpg","flash/04.jpg"); var filter:BlurFilter = new BlurFilter(0, 0, 3); var picNum:Number = 0; var nextPic_int:Number var picHolder:MovieClip = _root.createEmptyMovieClip("picHolder", 1); function fadeOut(){ clearInterval(nextPic_int); picHolder.onEnterFrame = function(){ if(this._alpha > 0){ this._alpha -= 1; filter.blurX = (100 - this._alpha) / 4; filter.blurY = (100 - this._alpha) / 4; this.filters = [filter]; }else{ delete this.onEnterFrame; loadPic(); } } } function loadPic(){ trace("picNum: " + picNum); //load the pic here picHolder.createEmptyMovieClip("pic", 1); picHolder._alpha = 0; picHolder.pic.loadMovie(picsArray[picNum], 1); picHolder.onEnterFrame = function(){ if(picHolder.pic.getBytesLoaded() > 4 && picHolder.pic.getBytesLoaded() == picHolder.pic.getBytesTotal()){ this.onEnterFrame = function(){ if(this._alpha < 100){ this._alpha += 2; filter.blurX = (100 - this._alpha) / 4; filter.blurY = (100 - this._alpha) / 4; this.filters = [filter]; }else{ delete this.onEnterFrame; nextPic_int = setInterval(fadeOut, 10000); } } } } if(picNum == picsArray.length - 1){ picNum = 0; }else{ picNum++; } } loadPic(); stop(); ==============================

    • ベストアンサー
    • Flash
  • [Flash]actionscript2.0を用いて歯車を作りたいのですが

    Adobe FLASH CS2を使い2つのかみ合った歯車を制作しています。 ドラッグで片方の歯車を回転させると もう片方の方は逆回転になるはずですが、 うまいことactionscriptをかくことができません。 片方はこのようなactionscriptを使っているのですが うまい作り方はないでしょうか。 よろしくおねがいします。 on (press) { //このMCの基準点からのマウス座標を取得 rx0 = _root._xmouse-this._x; ry0 = _root._ymouse-this._y; //このMCの基準点とマウスとの距離を算出 td0 = Math.sqrt(rx0*rx0+ry0*ry0); //マウスによる回転の差分を算出 tr0 = (Math.PI/2+Math.atan2(ry0, rx0))*180/Math.PI-this._rotation; //onEnterFrame を定義 this.onEnterFrame = function() { //現在のMCの基準点からのマウス座標を取得 rx1 = _root._xmouse-this._x; ry1 = _root._ymouse-this._y; //このMCの回転を計算 this._rotation = (Math.PI/2+Math.atan2(ry1, rx1))*180/Math.PI-tr0; //このMCの移動を計算 }; } on (release, releaseOutside) { //この onEnterFrame を削除 delete this.onEnterFrame; }

専門家に質問してみよう