FLASH CS5でnow loadingでランダム再生を読み込みたい

このQ&Aのポイント
  • FLASH CS5で10枚の画像を切り替えるアニメーションを作成したいです。
  • 画像の切り替えは右と左のボタンを押すことで行われます。
  • now loadingを使って全ての画像を読み込んでからアニメーションをスタートさせたいです。
回答を見る
  • ベストアンサー

FLASH CS5でnow loadingでランダム再生を読み込みたい

FLASH CS5でnow loadingでランダム再生を読み込みたい FLASH CS5で10枚の画像(表示されいるのは1枚で、左右に隣の画像が少し見える感じ)があり、その下に右、左のボタンがありを押していくと、画像が切り替わっていくアニメなのですが 開始のフレームをアクセスする度に変わるランダムにしたいです。(開始の画像が入るたびに変わる) そのためにnow loadingですべてを読み込ませてからスタートさせないとなのですが、 1フレーム目に以下のタグを入れました。 このやり方だと、エラーがでます。 //再生停止 stop(); //イベントリスナーを登録 //(毎フレーム時間で実行,実行関数 goRnandom) this.addEventListener(Event.ENTER_FRAME,goRnandom); //関数 goRnandom の定義 function goRnandom(evt:Event):void { //変数 per にロードされたパーセントを取得 var per:Number = this.loaderInfo.bytesLoaded / this.loaderInfo.bytesTotal * 100; // //もしロードパーセンテージが 100 に達すれば if (per >= 100) { //登録したイベントリスナーを削除 this.removeEventListener(Event.ENTER_FRAME, goRnandom); //変数 rnd_num に 0以上1未満 のランダムな数を代入 var rnd_num:Number = Math.random(); if (rnd_num < 10 / 100) { gotoAndPlay(2); } else if (rnd_num < 10/100) { gotoAndPlay(8); } else if (rnd_num < 10/100) { gotoAndPlay(14); } else if (rnd_num < 10/100) { gotoAndPlay(20); } else if (rnd_num < 10/100) { gotoAndPlay(26); } else if (rnd_num < 10/100) { gotoAndPlay(32); } else if (rnd_num < 10/100) { gotoAndPlay(38); } else if (rnd_num < 10/100) { gotoAndPlay(44); } else if (rnd_num < 10/100) { gotoAndPlay(50); } else { gotoAndPlay(57); } } } どこか間違っている箇所はあるのでしょうか? 教えてください。

  • peco33
  • お礼率79% (123/154)
  • Flash
  • 回答数4
  • ありがとう数8

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

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

#2です > ActionScriptのほうですが、確かに2.0になっています。 ご質問のスクリプトをActionScript 2.0 に書き直すと次のようになります。 ---------------------------- //再生停止 stop(); //毎フレーム時間で実行するイベントハンドラメソッドを定義 this.onEnterFrame = function():Void { // //変数 per にロードされたパーセントを取得 var per:Number = this.loaderInfo.bytesLoaded/this.loaderInfo.bytesTotal*100; // //もしロードパーセンテージが 100 に達すれば if (per>=100) { //登録したイベントハンドラメソッドを削除 delete this.onEnterFrame; //変数 rnd_num に 0以上1未満 のランダムな数を代入 var rnd_num:Number = Math.random(); if (rnd_num<10/100) { gotoAndPlay(2); } else if (rnd_num<20/100) { gotoAndPlay(8); } else if (rnd_num<30/100) { gotoAndPlay(14); } else if (rnd_num<40/100) { gotoAndPlay(20); } else if (rnd_num<50/100) { gotoAndPlay(26); } else if (rnd_num<60/100) { gotoAndPlay(32); } else if (rnd_num<70/100) { gotoAndPlay(38); } else if (rnd_num<80/100) { gotoAndPlay(44); } else if (rnd_num<90/100) { gotoAndPlay(50); } else { gotoAndPlay(57); } } }; ---------------------------- ※実際は   else if (rnd_num<20/100) や   else if (rnd_num<30/100) のように   10ずつ上がるのかどうかは知りませんが。 > 3.0は進化なのでしょうか? 一応は進化のようですよ。 私のイメージですが, 進化したというかキメが細かくなったという感じがします。 例えば 「ハワイに行く」 という行動をするとします。 ActionScript 2.0 までは  飛行機に乗って「ハワイへ行け」 という動作命令で済んでいたような感じに思います。 しかし ActionScript 3.0 では 「飛行機に乗ってから命令する」というとんでもないことはできなくなり, 必ずチケット売り場でチケットを買わなければならず また航空会社やエコノミーやビジネスなどのコースの指定まで必要になった という感じがします。 つまり ActionScript 3.0 では 手続きが多くなって気軽にハワイに行けなくなった感じです。 しかし手続きが多い分, 好きな航空会社を選べたり機内食を選べたりなどなど, キメ細かい指示ができるようになった感じがします。 そんな感じではないでしょうか。 ニーズが多様化しているので その分 色々な分岐(分岐の選択) が必要になったということだと思います。 ある意味 いちいちいちいち命令しないとならなくなったので Flash 君 はバカ に退化してしまったようにも思えます。 しかし いちいちいちいちの命令に対応できるようになったので Flash 君 は賢く進化したようにも思えます。

その他の回答 (3)

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

すみません,#3 です。 //変数 per にロードされたパーセントを取得 var per:Number = this.loaderInfo.bytesLoaded/this.loaderInfo.bytesTotal*100; #3で書いた↑これ間違ってますね。 ActionScript 3.0 のまんまでした。 次のように訂正させていただきます↓。 //変数 per にロードされたパーセントを取得 var per:Number = this.getBytesLoaded()/this.getBytesTotal()*100;

peco33
質問者

お礼

できました!! ありがとうございます!! 今後の事もあるので、FLASH CS5の仕様についていく必要がありますね。 ActionScript3.0もそうですが、 知識があれば、使えるものだと思うので、要勉強です。 このたびは有り難う御座いました。

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

ご質問より引用 > どこか間違っている箇所はあるのでしょうか? > 教えてください。 内容は「かなり変」ですが ActionScript 3.0 の文法的には変ではありません。 すなわち ActionScript 3.0 のパブリッシュ設定では エラーは出ないと思います。 ※内容が「かなり変」な点は #1 の方の書いていらっしゃるような点と   ご質問のスクリプトではランダムでとんな数が出ようとも   フレーム2 もしくは フレーム57 にしか行かないということです。   ↑エラーが出なくなって動作するようになってから    じっくり考えてみてください。 #1の方への補足より引用 > function goRnandom(evt:Event):void { > ここが毎回ひっかかるみたいです。 あの...,ですね.......。 「ファイル」→「パブリッシュ設定」で 「Flash」タブを選択すると スクリプト の設定が ActionScript 2.0 または 1.0 になってませんか? ご質問で書かれていらっしゃるスクリプトは ActionScript 3.0 ですよ。 また #1 の方が書いてくださっている回答も ActionScript 3.0 であることが大前提になっています。 パブリッシュ設定をご確認ください。

peco33
質問者

補足

ありがとうございます。 ActionScriptのほうですが、確かに2.0になっています。 3.0だとオブジェクトにコードがかけない ボタンインスタンスまたは MovieClip インスタンスのアクションはサポートされていません。オブジェクトインスタンスのすべてのスクリプトは無視されます。 など作り的に無効な物が多すぎます。 3.0は進化なのでしょうか?今迄2.0で操作していた私には3.0が使いづらすぎます またこの件には関係ないのですがmacromediaの8からadobeCS5に移行した際にもすごい違和感を感じました。 モーショントゥイーンの仕様が変わり過ぎです。 それでもやはり新しいソフト、新しいスクリプトは使いやすく、より良いものに進化しているんですよね本当は。 僕が使いこなせないだけで。

回答No.1

普段そういう書き方しないから定かではないですが リスナー関数の中のthisはスクリプトが書かれているところの参照に ならないとか、関数の中で自分を参照することはできないとか そんなんじゃないでしょうか this.removeEventListener(Event.ENTER_FRAME, goRnandom); ↓ evt.target.revemoveEvetListener(evt.type,arguments.callee) その他のthisも同じくevt.targetに あと、読み込み完了したらランダムなフレームに gotoAndPlayするのはもうちょっとスマートなやり方がある気がします (というかこれでは1割2、9割57、それ以外にはならないと思うんですが?) もし開始フレームは2,8,14....のいずれかでないといけないとしても gotoAndPlay([2,8,14,20,26,32,38,44,50,57][Math.floor(Math.random()*10)]) とか

peco33
質問者

補足

ありがとうございます。 上のように変更し thisを全てevt.targetにして gotoandplayも上のようにしましたがダメでした。 元の時もそうなんだんですが、 function goRnandom(evt:Event):void { ここが毎回ひっかかるみたいです。 「クラスまたはインターフェイス'Event'はロードできませんでした」 と表示されます。 アクションスクリプトほぼ初心者なので、まったくわかりません。

関連するQ&A

  • Now Loading+FLV_????? 教えてください!

    皆様、お世話になります。 以下、某Flash入門書に載っている簡単なNow Loadingのスクリプトです。 この本では、load完了後、jpegの写真が表示されます。 私は、load完了後に、自前のFLVを再生させたいと思い、既存のjpegを 自前のFLVに取り替えました。書き出すと、エラーが起こります。 以下、どのようにしたら、Now Loadingのカウントダウン後に、FLVが表示 できるでしょうか? ----------------------------------------------------------------------------------------------------------------- //イベントリスナーの登録 addEventListener(Event.ENTER_FRAME, loadCheck); stop(); function loadCheck(event:Event):void { //ロードされたパーセンテージを求める var percent:int = Math.ceil(loaderInfo.bytesLoaded / loaderInfo.bytesTotal * 100); //テキストボックスに表示 percentBox.text = percent + "%"; //100%ロードされたら if (percent >= 30) { //イベントリスナーを削除 removeEventListener(Event.ENTER_FRAME, loadCheck); //2フレーム以降に進む gotoAndPlay(2);; } } -----------------------------------------------------------------------------------------------------------------

    • ベストアンサー
    • Flash
  • Now Loadingを繰り返してしまいます。

    トップページになるファイルの中に、 別のswfファイルをロードムービーさせ、 最初の2フレームでNow LoadindのActionScriptを設定しました。 30フレーム目まで読み込んだら、3フレームから開始するようにしました。 if (_framesloaded>3) { gotoAndPlay(3); } else { gotoAndPlay(1); } ↑このように記述しました。 すると、繰り返し再生で流したいのですが、2順目から一瞬2フレーム目までに入れたNow Loadingがチラっと出てしまいます。 上記スクリプトに何の記述を加えれば、 2回目の再生からは、3フレーム目からはじめる事ができるでしょうか? わかりずらい質問の仕方になっているかもしれませんが、 わかる方、お知恵をお貸しください。

    • ベストアンサー
    • Flash
  • FLASHで「Now loading」を入れたら画像が劣化しました;

    フラッシュで1フレームだけにムービークリップを全て入れて、ムービーを作成しました。(ムービー1とします) そのムービー1に「Now loading」の画像を付け足したかったので、その分フレーム数を増やし、ムービーを付け足したところ、「Now loading」が終わって表示されるムービー1の画像が劣化してしまいました。 ムービー1と「Now loading」のムービーを別々のシーンに分けてみたりもしましたが、結果は同じです。 ムービー1の画像のプロパティのGIFやJPEG、スムージング、書き出し時の設定なども色々変えて試してみましたが、劣化は収まりません。 「Now loading」のムービー(フレーム)を削除すると、ムービー1の画像の劣化が収まります。(シーンを分けた場合は、「Now loading」のシーンを削除し、ムービー1のスクリプトの最後のthis.stop();を削除した時点で、劣化が収まります) 「Now loading」は残したまま、画像を劣化させずにムービー1を表示させるには、どうすれば良いでしょうか?

  • Flash IE6でプログレスバーが表示されない

    IE6上で表示させるFlashを作成しているのですが、 最初にプログレスバーを作成し、コンテンツをロードした後でメインの画面を表示させようとしています。 ところがFirefoxではうまく表示されるのですが、 IE6,7で行うと最初のプログレスバー等の画像が一切表示されず、 いきなりメインの画面から始まってしまいます。 コードはAS3で以下のようになっています。 1フレーム目: 何も記述せず 2フレーム目: var percentNo:int; var bInfo:LoaderInfo= root.loaderInfo; percentNo = Math.ceil(bInfo.bytesLoaded /bInfo.bytesTotal * 100); //画面のテキストフィールドに%を表示 percent_text.text = ""+percentNo + "%"; //フレーム遷移 if(percentNo >=100){   gotoAndPlay(3); //メインフレームへ }else{ gotoAndPlay(1); //1フレームからループ } 環境は ・Flash CS3 ・Flash Player9 です。 何か解決方法をご存知の方がいらっしゃればご教授の程をよろしくお願いします。

    • ベストアンサー
    • Flash
  • ランダムでシーンの移動ができない。

    ランダムでシーンの移動をやりたくて、 http://okwave.jp/kotaeru.php3?q=1691219 を参考にスクリプトを組んだのですが、うまくいきません。 書いたスクリプトは、 rand = Math.floor(Math.random()*6); if (rand == 0) { gotoAndPlay("シーン 7", 1); } else if (rand == 1) { gotoAndPlay("シーン 5", 1); } else if (rand == 2) { gotoAndPlay("シーン 6", 1); } else if (rand == 3) { gotoAndPlay("シーン 4", 1); } else if (rand == 4) { gotoAndPlay("シーン 3", 1); } else if (rand == 5) { gotoAndPlay("シーン 2", 1); } です。 (シーン1の一番最初に書きました。swfが読まれたらすぐにランダムが始まる予定です。。。) 現状、ランダムを全く無視して、作ったシーンの順番でシーンの再生が進んでしまいます。 スクリプトに問題があるのでしょうか。。。? よろしくお願いします。

    • ベストアンサー
    • Flash
  • (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へ先にもってきたり 色々ためしましたがうまくいきませんよろしくおねがいします。

    • ベストアンサー
    • Flash
  • AS3.0 ローディング

    こんにちは。 AS3.0でローディングを作成しているんですが、 うまくいきません。。 現状はこんなかんじです。。 参考書を参考に作成したんですが、 タイムライン上の1フレーム目に下記のASとloading_barを配置してあり、 ローディング終了後、2フレーム目から再生したいんですが、 ローディングが終了した後、そこからびくともうごきません。。。 var swf_loaderInfo = this.loaderInfo; swf_loaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); swf_loaderInfo.addEventListener(Event.COMPLETE, onLoaded); function onProgress(event){ var percent = Math.floor(swf_loaderInfo.bytesLoaded/swf_loaderInfo.bytesTotal*100); loading_bar.loaded_mc.scaleX=percent/100; }; function onLoaded(event){ swf_loaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress); swf_loaderInfo.removeEventListener(Event.COMPLETE, onLoaded); this.play(); }; AS自体、学び始めてまもない初心者中の初心者です。。。 参考サイトやアドバイスなどありましたら、 どうぞよろしくお願いします。。

  • FLASH AS3.0 ローディングバーについて教えてください。

    AS3.0を勉強しています。 インターネットや、書籍などで調べたのですが、どうしても原因がわからないので、どなたかご教授願います。 基本的な、横に伸びるローディングバーを作成したいと思っています。 タイムラインの1フレーム目に、矩形(H:10px,W100px)を作成し、シンボル化して、インスタンス名を『bar_mc』とつけました。 ASフレームの1フレーム目に、 //ローディングの読み込み var percent:uint = Math.floor(this.loaderInfo.bytesLoaded/this.loaderInfo.bytesTotal*100); //読み込み率に2をかけて、伸び率を2倍に設定 this.bar_mc.scaleX = percent * 2; ASレイヤーの2フレーム目に、 if (percent < 100) { gotoAndPlay(1); }else{ play(); } ASレイヤーの3フレーム目に、 stop(); と記述しました。 一応作動するのですが、問題は、ローディング中に横にのびるように設定した矩形が、設定してある200pxで止まらず、stageの右端いっぱいまでのびてしまうことです。 仮に、 this.bar_mc.scaleX = percent ; と変更しても、やはり右端までのびきります。 これは、何が原因でしょうか? 自分ではどうしてもわからないので、どうか教えてください。 よろしくお願いいたします。

  • Flash MX フレーム ランダムに取得する

    現在、あるコンテンツ製作していて、 画面上に5個画像(ムービークリップ)を表示しています。 そのムービークリップのなかには、グラフィックが10個入っていて、 targetFrame = Math.ceil(Math.random()*10); this.gotoAndPlay(targetFrame); というスクリプトで10個のフレーム中からランダムに表示させています。 (画面上の5個の画像は、その1個ずつが10個(フレーム)の中からランダムに選ばれるので、 5個の中には、同じ画像(同じフレーム)が含まれる場合があります。) 画面上に、あと2個画像(ムービークリップ)を追加し、その2個も、 10個のグラフィック(フレーム)中からランダムに表示させたいのですが、 かならず2個とも同じグラフィック(同じフレーム)を選ばせるにはどうすればよいでしょうか? Flash歴は長いのですが、知識はあまりない馬鹿な私に教えてやってください。

    • ベストアンサー
    • Flash
  • ランダムで画像を表示させるには?

    環境はFlashCS5で、アクションスクリプト3.0を使用しています。 5枚の画像(インスタンス名:mc0~mc4)をランダムで表示させるムービーを制作しているのですが、 下記のスクリプトですと、ランダムで画像が表示されるのですが、画像の切り替えがループになってしまって、次から次へとランダムで画像が切り替わります。フレーム1に下記のスクリプトを記述し、フレーム1にムービーインスタンス「mc0」から「mc4」を配置しています。 function randomShowMC():void { for (var i:int=0; i<5; i++) { this["mc" + i].visible = false; } var rnd:int = Math.floor(Math.random() * 5); this["mc" + rnd].visible = true; } randomShowMC(); var myTimer:Timer = new Timer(3000); myTimer.addEventListener(TimerEvent.TIMER ,function(){randomShowMC()}); myTimer.start(); このスクリプトを改良?改造?して、ランダムの画像が1回のみ…つまり、おみくじみたいに、(mc0~mc4の画像を)ランダムで1回のみ画像を表示させたいのです…表示後の画像が切り替わらずそのままで停止させたいのです。 又は、ムービーインスタンス「mc0」から「mc4」の画像をランダムで表示させ、最初に表示された、その画像で停止させるスクリプトを新規に記述しても構いませんので、ご指導・アドバイスをお願い致します…。 どなたか、解る方がいましたらランダム画像表示で1回表示のみのループしないスクリプトを教えてください。よろしくお願い致します…。

    • ベストアンサー
    • Flash

専門家に質問してみよう