• ベストアンサー

画像をランダムに表示するには

プログラム初心者ですAS3.0で書いています ステージの幅は横550×縦400 10個のムービークリップをランダムに8個表示したいです 縦が2個、横が4個で少し間を空けて表示 addChildで表示したいです 重複もできればなくしたいです よろしくお願いします

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

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

配置する10個のMC(ムービークリップ)は 例えば違う絵柄や違うアニメーションが入っているような別物であるものとします。 つまり10個のMCはシンボルとしても別物であるとします。 (各MCの "基準点" の位置はご自身でしっかり把握しておいてください。) MCを用意した後のさらに下準備として 作成した10個のMCシンボルに別々のクラス名を付けます。 クラス名を付けることや その先のことも含めて次のページのようなことをして行きます。 「[AS3] クラスを文字列で参照したい」 http://f-site.org/articles/2008/01/17051234.html 上記ページではMCシンボルに「Pen」というクラス名を付けていますが ここでは「MC0」「MC1」「MC2」…「MC9」という 10個のクラス名を付けるとしておきます【添付図↓】。 そしてフレームに次のようなスクリプトを書きます。 --------------------------- //「MC0」を配置するx座標を設定 var start_x:Number = 80; //「MC0」を配置するy座標を設定 var start_y:Number = 40; //ランダム配置するMCの個数を設定 var haiti_n:int = 8; //横に並べる個数を設定 var yoko_n:int = 4; //MCを配置する横間隔を設定 var kankaku_x:Number = 100; //MCを配置する縦間隔を設定 var kankaku_y:Number = 60; //クラス名を入れる配列 var name_arr:Array = new Array(); //「MC0」~「MC9」を配列の要素に代入 for (var i:int = 0; i<=9; i++) { name_arr[i] = "MC" + i; } for (i = 0; i<haiti_n; i++) { //配列の要素分の乱数を取得 var rand_n:int = Math.floor(Math.random() * name_arr.length); //その要素を抜きとり取得 var name_str:String = name_arr.splice(rand_n,1); //文字列のクラス化 var myClass:Class = Class(getDefinitionByName(name_str)); //そのクラスを呼び出して配置 this["mc" + i] = new myClass(); this["mc" + i].x = i % yoko_n * kankaku_x + start_x; this["mc" + i].y = Math.floor(i / yoko_n) * kankaku_y + start_y; addChild(this["mc" + i]); } //(※後の使用方法例) this.mc2.rotation = 30; --------------------------- これでパブリッシュします。 上のスクリプトでは このMCの重複出没を防ぐために Arrayクラスの splice() メソッドを使っています。 このメソッドを使わずに 配列の中身をあらかじめランダムシャッフルしておいた上で 要素0から順に8つの要素を取り出しても良いと思います。 ※人間的にはこちらの方が難しいですが   PC的には多分こちらの方が処理が速いと思います。 「配列を偏りなくランダムに並替える」 http://fumiononaka.com/TechNotes/Flash/FN0212003.html それと「%」は剰余演算子です。 その他 Google検索「配列アクセス演算子」 http://www.google.co.jp/search?q=%94z%97%F1%83A%83N%83Z%83X%89%89%8EZ%8Eq

flash0
質問者

お礼

できました!(T.Tぶわっ ちょうどfor文とか配列とか覚え始めたころなので不安でしたが 説明がとても解りやすくて助かりました!ありがとうございます

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 画像のランダム表示

    こんにちは。 フラッシュで、画像をランダムに表示させたいのですが、 スクリプトの書き方がわかりません。何方か教えていただけないでしょうか? 構成は ステージ上の【表示ゾーン(zon_mc)】ムービークリップの中に【バリ表示(bari_mc)】ムービークリップを作っています。 トップのステージのタイムラインとは別に画像を表示、非表示させたいのでこのような形になってます。 表示させたい画像は【bari】ファルダの中の【bali01.jpg】~【bali06.jpg】です。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • jpgを規定の範囲内に表示したい

    Flash初心者です。 ムービークリップ(インスタンス:image)に外部ファイル(jpg)を ランダムに読み込んで表示していまして 何とか表示することまではできました。 外部ファイルは全て大きさが異なっていますので 横と縦の長さがそれぞれ異なっており this._width=150 this._height=100 のようにしてしまうと 縦横の対比が異なってしまうためきれいに表示ができません。 縦100px、横150pxより大きくなってしまった場合 縦横同じ比率で縮小させて表示させるには どのようなスクリプトを書けばいいでしょうか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • Flash8 ムービークリップをランダムに表示(更新する度に順番を変更)

    他の質問を確認させて頂いたのですが「更新する度に順番を変更」という部分で行き詰まり、今回質問させて頂きました。色々と調べたのですが、同じ質問が存在していたら申し訳ございません。 今回FLASHの作成で、1つのSWF内で3つのムービークリップ(mc_01、mc_02、mc_03)をランダムな順番で表示させたいというものです。ランダムに表示させるまでは、何とか行き着いたのですが、行き詰まったのは「更新の度に前回と順番が重複しない」ということです。 現在の状況は、下記の通りです。 mainというムービークリップに3つのムービークリップ(mc_01、mc_02、mc_03)をランダムに表示。 スクリプトは、下記の通りです。 var a = Math.floor(Math.random()*3)+1; main.attachMovie(["mc"+a], "mc", 0); 現状だと、更新する度にランダムに表示されますが、更新を押した際に、先頭が前回と同じムービークリップになってしまうことがあります。 (一回目の更新:mc_02 → mc_01 → mc_03) (二回目に更新:mc_02 → mc_03 → mc_01) この並びをアクションスクリプトで変えることは可能なのでしょうか?可能だとすれば、どのようなスクリプトを記述、もしくは参考にすれば良いでしょうか? 初心者な質問で申し訳ございませんが、宜しければどなたかご回答のほど宜しくお願い致します。

  • AS3リンケージ設定したムービークリップの中で、フレーム移動がしたいです。

    初心者です。 AS3で、 リンケージ設定したムービークリップを addChildで呼び出し、 呼び出したムービークリップの中の、 指定したフレームに移動するにはどうしたら宜しいでしょうか。 ステージに配置した場合、インスタンス名を付けて インスタンス名.gotoAndPlay("フレームラベル"); で移動しますが、 リンケージ設定したムービークリップの場合はインスタンス名の代わりに リンケージ名で呼び出せないのですか。

    • ベストアンサー
    • Flash
  • C++で画像を被らないようにランダムに表示

    初めまして。 現在、C++を勉強しているものです。 配列に収納された画像をランダムにpictureboxに表示させたいです。 しかし、ダブらないようにしたいです。 1枚だけならどこかでソースが載っていたのでそれをコピーしたらいいだけだと思うので問題はないのですが、3枚をランダム表示させ、なおかつ同じ物が表示しないようにしたいのです。 1枚目の画像が決定した後、それ以外の画像からランダムに選択。さらに1枚目・2枚目の画像が決定したらそれ以外の画像からランダムに選択。 初心者の案としては (1)重複なしの乱数を生成 (2)生成された数を配列と参照する (3)参照された画像をpictureboxに表示する こんな事が出来ますか? また、どうしたらいいのでしょうか? よろしくお願いします。

  • ランダムに画像ファイルを選出するには?

    Flash初心者です。 下記の例を実現する方法を教えていただけないでしょうか。 例) Aというフォルダに10000枚の画像ファイルがあるとします。 Aからランダムに画像を選び、ムービークリップ(以下MC)に読み込ませて表示し、任意の秒数で画像が切り替わっていくビューワーを作成するとして、"ランダムに画像をMCに読み込ませる(ただし、一度読み込んだものは二度は読み込まない)"にはどのようなやり方があるのでしょうか。 簡易かつ動作が軽いActionScriptの記述法を教えていただけると助かります。 よろしくお願いします!

  • 画像をランダムに表示させたい

    はじめまして、質問させていただきます。 flashで、いくつかのムービークリップをランダムに表示させようとしています。 いろいろ調べてみて、swfファイル単体では表示させれるようになったのですが、なぜかhtmlで出力させようとすると何も表示されなくなってしまいます。タグが間違ってるのかと思って他のフラッシュでも試してみたのですが、このフラッシュだけが表示されません。 ためしにバージョンアップもしてみましたがダメでした。 よろしかったらご回答お願いします。 htmlに貼り付けたタグ <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=*,*,*,*" WIDTH="300" HEIGHT="300"> <PARAM NAME=movie value="img/top/random.swf"> <PARAM NAME=quality value=high> <PARAM NAME=bgcolor VALUE=#ffffff> <PARAM NAME=loop value=true> <PARAM NAME=wmode VALUE=transparent> <EMBED src="img/top/random.swf" quality=high TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" WIDTH="300" HEIGHT="300" loop=true> </EMBED> </OBJECT> フラッシュのスクリプト 1フレーム目に画像を置かずにフレーム自体に gotoAndStop(2 + random ( 4 )); 2フレーム~5フレームにムービークリップ

    • ベストアンサー
    • Flash
  • ムービークリップ変換について質問です。

    AS3.0でCS5です。 やや略しますがこのような感じでASでダイナミックテキストを表示させています。 package { public class test extends MovieClip { public function test() { var textInput:TextArea = new TextArea(); var textOutput01:TextField = new TextField(); var textOutput02:TextField = new TextField(); var textOutput03:TextField = new TextField(); textOutput01.text = 'あああ'; textOutput02.text = 'いいい'; textOutput03.text = 'ううう'; addChild(textInput); addChild(textOutput01); addChild(textOutput02); addChild(textOutput03); } } } 実現したいことは、 1:ダイナミックテキストをクリックすると文字がテキストエリアに表示 2:ダイナミックテキストの移動(ドラッグ&ドロップ) ステージに配置する場合であれば、 1:ステージにダイナミックテキストを配置 2:ダイナミックテキストをムービークリップに変換 これでいいと思うのですが、ASだけでこのようなことを実現するには どうすればいいのでしょうか? ダイナミックテキストのままでは、クリックもできないのでムービークリップに 変換しなければ無理かと考えております。 ちなみに、テキストエリアに表示された文字を変更すればダイナミックテキストにも 反映されるものにしたいのでダイナミックテキストは外せません^^;

    • ベストアンサー
    • Flash
  • 画像をランダムで表示させて一定時間停止させたい

    FlashCS4でAS3.0を使用しております。 添付画像のように「画像レイヤー」には10フレーム毎に画像を入れてあります。50フレームですので5画像を入れてあります。「ラベルレイヤー」には、先の画像におのおのにラベルを付けてます。「ASレイヤー」には各画像を一時的に停めておくためのスクリプト「stop();」を記述してあります。(10、20、30、40、50フレーム) このままですと、ムービーをプレビューした場合には(10フレームの)1枚目の画像が表示されて停止している状態になります。そこで、エンターキーを押すと2枚目の画像が表示されて停止…さらにエンターキーを押すと…3枚目の画像が表示されて停止…順番どおりの表示後停止となります。このムービーをプレビューした際に、画像がタイムラインの順番に関係なくランダムで表示されて、しかも一定時間停止(例えば10秒間)させた後、再びランダムで表示…10秒間停止後に三度ランダム…と言うようにエンドレスでランダムで表示させて10秒間停止後に、またランダム…のようにしたいのですが、1フレームのスクリプトの記述内容をご指導・ご指示願います。よろしくお願い致します。

    • ベストアンサー
    • Flash
  • 【AS3】ムービークリップからステージへアクセスできません

    はじめまして。FlashでAction Script3.0を勉強し始めたばかりの初心者です。 実は、AS3でどうしても不明な部分があり この度問い合わせさせていただいております。 AS2では_rootでステージにあるムービークリップにアクセスできたかと思うのですがAS3では代わりのものはあるのでしょうか。 現在ステージ上にいくつかムービークリップを置いて、 それぞれのムービークリップ最後のタイムラインに、 「root.gotoandPlay("scene1")」というように記述して、 ステージにもどり、そのフレーム名から始めたいのですが(この場合、scene1というステージ上のフレームから再生させたい) 「未定義である可能性のgotoAndPlayメソッドを静的型flash.display:DisplayObjectContainerの参照を使用して呼び出しました」というエラーになってしまいます。 外部クラスなどは使用しておらず、 ライブラリに格納してあるムービークリップをステージに配置し、 初めのムービークリップを再生したら、次のムービークリップを再生、、というふうに順々に表示させていきたいのですが・・ アドバイスをいただけると大変助かります!! よろしくお願いいたします。

    • ベストアンサー
    • Flash