• ベストアンサー

画像のランダム配置からボタンクリックでまとまる

「ロールオーバーで下画像を表示させる」という質問の回答がありました。 同じような設定で、ステージを400x400、mc0~mc15をランダムに並べておき 別に置いたボタンをクリックすると正しい座標位置へゆっくり移動し、ひとつの 写真にできあがるというのを作りたく思います。 mc0~mc15は写真をスライスした画像100x100です。 ご教授願います。

noname#142022
noname#142022
  • Flash
  • 回答数2
  • ありがとう数2

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

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

#1です。 > やってみましたが、動作しないのです。 と書かれましても どこで何がどう動作しないのかがわかりません。 例えば 「エラーが出て全く動作しない(パブリッシュも不可)」 「エラーは出ないがmc0~15がランダムに配置されない」 「mc0~15はランダムに配置されるがボタンで並び変わらない」 などなど様々なことが考えられます。 その状況を見ていない第三者にとっては 状況を見ている人よりももっと何のことかわからないのですよ。 一応私の方は ActionScript 2.0 設定であれば Flash Player 6 以上 SWF パブリッシュ設定 で動作確認済みです。 どこで詰まっているのかさっぱりわかりませんので スクリプトを次のように書き替えて(★部分の trace を追加しただけ), 「制御」→「ムービープレビュー」で詰まっている部分を確認してみてください。 //---------------------------------------------------- //動くスピードの設定 var spd:Number = 12/100; //mc0~15 の最初の座標を一時的に記録する配列 var tempPosArr:Array = new Array(); //変数 i を 0~15 まで 1 ずつ加算しながらループ for (var i:Number = 0; i<=15; i++) { //mc0~15 の最初の座標(「正しい座標」)を各MC内の変数に記録 this["mc"+i].start_x = this["mc"+i]._x; this["mc"+i].start_y = this["mc"+i]._y; //mc0~15 の最初の座標を一時的に記録する配列に記録 tempPosArr[i] = [this["mc"+i]._x, this["mc"+i]._y]; trace("★↓ mc" + i + ".star_x に値が入っているか"); trace(this["mc"+i].start_x); trace("★↓ tempPosArr[" + i + "] に値が入っているか"); trace(tempPosArr[i]); } //mc0~15 を配置するランダムな座標の配列 var randPosArr:Array = new Array(); //テンポラリ配列からランダムな要素を抜き取りランダムな座標の配列に代入 for (var i:Number = 15; i>=0; i--) { randPosArr.push(tempPosArr.splice(Math.floor(Math.random()*(i+1)), 1)[0]); } trace("★↓ randPosArr に値が入っているか"); trace(randPosArr); //mc0~15 をランダムな座標に配置 for (i=0; i<=15; i++) { this["mc"+i]._x = randPosArr[i][0]; this["mc"+i]._y = randPosArr[i][1]; trace("★↓ mc" + i + " の座標はランダムになっているか"); trace(this["mc"+i]._x + "," + this["mc"+i]._y); } //ボタンクリック時の動作 btn.onRelease = function():Void { trace("★↓ ボタンは動作しているか"); trace("ボタンがクリックされました"); //変数 i を 0~15 まで 1 ずつ加算しながらループ for (var i:Number = 0; i<=15; i++) { //mc0~mc15に毎フレーム実行する動作を定義 this._parent["mc"+i].onEnterFrame = function():Void { //「正しい座標」に向けてspdの割合ずつ移動 this._x += (this.start_x-this._x)*spd; this._y += (this.start_y-this._y)*spd; }; } }; //---------------------------------------------------- それと 他のスクリプトや他のインスタンスがじゃまをしているということはないでしょうね? 例えば, 同じインスタンス名を付けた別物があるとか 他の onEnterFrame が重なって動作しているとか。 「制御」→「ムービープレビュー」で 下の【図】↓のような感じになれば良いのです。 この↓状態から btn をクリックすれば「正しい位置」に戻ります。

noname#142022
質問者

お礼

>その状況を見ていない第三者にとっては >状況を見ている人よりももっと何のことかわからないのですよ。 申し訳ありませんでした。 出力では下記で止まります。もちろん、それはボタンを押していませんからそのように なりますね。 ★↓ mc15 の座標はランダムになっているか 300,300 次に、ボタンを押しても出力しませんでした。ということはボタンに何かと思い調べました ところ、インスタンス名が大文字になっていました。 修正したところ、動作しました。 ★↓ ボタンは動作しているか ボタンがクリックされました 早朝からの回答を頂きましてありがとうございます。

その他の回答 (1)

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

念のためですが 「ロールオーバーで下画像を表示させる」 http://okwave.jp/qa/q7020788.htmlhttp://okwave.jp/qa/q7020788.html などなど の続きというわけですから, Flash CS3 の ActionScript 2.0 ですね。 まず > 正しい座標位置へゆっくり移動 この具体的方法(トランジション)を書かれていませんから これは勝手にこちらで用意するものとします。 『「最初にmc0~mc15を配置した座標」を 「正しい座標」として記録しておいてから ActionScript で mc0~mc15 ランダムな座標に配置し, その後,ボタンをクリックすると 「正しい座標」=「最初にmc0~mc15を配置した座標」に戻す。』 という方法はいかがでしょうか。 これだと ステージのサイズを変えた場合や ムービークリップを配置したい場所を変えたい場合でも スクリプトを触ることなく自由に Flash を作ることが可能になります。 ステージ上には mc0~mc15 のムービークリップを いわゆる「正しい位置」(任意の「正しい位置」)に配置しておきます。 その上のレイヤーにでもボタンを作成して そのボタンには「btn」というインスタンス名を付けるものとしておきます。 ※【図】↓参照 この状態で フレームに書くスクリプト例です。 //--------------------------------------------------- //動くスピードの設定 var spd:Number = 12/100; //mc0~15 の最初の座標を一時的に記録する配列 var tempPosArr:Array = new Array(); //変数 i を 0~15 まで 1 ずつ加算しながらループ for (var i:Number = 0; i<=15; i++) { //mc0~15 の最初の座標(「正しい座標」)を各MC内の変数に記録 this["mc"+i].start_x = this["mc"+i]._x; this["mc"+i].start_y = this["mc"+i]._y; //mc0~15 の最初の座標を一時的に記録する配列に記録 tempPosArr[i] = [this["mc"+i]._x, this["mc"+i]._y]; } //mc0~15 を配置するランダムな座標の配列 var randPosArr:Array = new Array(); //テンポラリ配列からランダムな要素を抜き取りランダムな座標の配列に代入 for (var i:Number = 15; i>=0; i--) { randPosArr.push(tempPosArr.splice(Math.floor(Math.random()*(i+1)), 1)[0]); } //mc0~15 をランダムな座標に配置 for (i=0; i<=15; i++) { this["mc"+i]._x = randPosArr[i][0]; this["mc"+i]._y = randPosArr[i][1]; } //ボタンクリック時の動作 //「mc0」 ~ 「mc15」ロールオーバー時の動作定義 btn.onRelease = function():Void { //変数 i を 0~15 まで 1 ずつ加算しながらループ for (var i:Number = 0; i<=15; i++) { //mc0~mc15に毎フレーム実行する動作を定義 this._parent["mc"+i].onEnterFrame = function():Void { //「正しい座標」に向けてspdの割合ずつ移動 this._x += (this.start_x-this._x)*spd; this._y += (this.start_y-this._y)*spd; }; } }; //--------------------------------------------------- ランダムシャッフルの方法ですが このスクリプトで書いたもの以外に 次のような考え方(方法)などなどもあります。 「配列を偏りなくランダムに並替える」 http://fumiononaka.com/TechNotes/Flash/FN0212003.html

noname#142022
質問者

お礼

いつもありがとうございます。 やってみましたが、動作しないのです。

関連するQ&A

  • ボタンのカウント数でムービークリップの位置が変わるギャラリーの作り方

    いつもお世話になっております。 初めて質問させていただきます。 Flashは初心者です。 現在、写真のギャラリーを制作しております。 下記のようにサムネイルを下1列に並べ、上に写真を表示する形です。   ┌─────────┐   │         │ D  │  C    B  │A   │         │   │ ○ ○ ○ ○ ○ │   └─────────┘ ○→ボタン ボタン1を押すと、写真1がAの位置からBの位置へ移動。 ボタン2を押すと、写真1がBの位置からCの位置ヘ移動。 そして、写真2がAの位置からBの位置へ移動。 ボタン3を押すと、写真1はCの位置からDの位置へ移動し、 ステージ上から見えない状態に。 写真2はBの位置からCの位置ヘ移動。 写真3はAの位置からBの位置へ移動。 このようなものを制作しようとしています。 【ややこしい説明で申し訳ございません】 現在、 photo_mcというムービークリップの1フレームごとに、 写真1,2,3を入れて、ボタンのアクションスプリクトに on(press){ //ムービークリップを複製し、指定の位置に配置// obj = _root.attachMovie("photo_mc", "mc01", 1); obj._x = 390; obj._y = 0; //商品画像の決定// _root.mc01.gotoAndPlay(3); } を記入しており、 ボタンをクリックすると、選択したボタンの画像が 指示した場所に表示される、という状態です。 この先の処理にいきづまっております。 ボタンが押されたらrootにおいてあるcountに1を加算 ↓ countにある数字をphoto_mcが取得(?) ↓ その数字に応じて動くどの位置に行くか判断し、移動 というように動かそうとしているのですが、 最初のカウントに1を加算というところでつまづいており、 その先も、可能なのかどうかすらわからない状態です。 なにか別に良い方法があれば、ご教授いただければ幸いです。 どうぞよろしくお願い致します。

    • ベストアンサー
    • Flash
  • ボタンをクリックする度にランダムな画像を表示には

    FLASHで簡単なゲームを作っています。ボタンをクリックするとランダムな画像(もしくはシーン)を表示させるにはどうすればよいでしょうか。よろしくお願いします。

    • ベストアンサー
    • Flash
  • 始点からクリックした位置にゆっくり線を引きたい

    Flash8を使用しています。 _root上にステージと同じサイズの四角stage.mcがあります。その上に始点(90,380)からクリックした位置まで直線を描きたいと思っていますがうまくいきません。 レイヤーは2つあり、下がstage.mc、上に以下のスクリプトを書いています。 _root.stage_mc.onPress = function() { x1 = _root._xmouse; y1 = _root._ymouse; _root.stage_mc.lineStyle(5, 0x000000, 100); //太さ5、黒、アルファ値100に設定 _root.stage_mc.moveTo(90, 380); //始点を90,380に設定 _root.stage_mc.lineTo(x1, y1); //始点からx1,y1へ直線を引く }; でも、うまくいきません。 できればゆっくりと描きたいと思っているのですが速度を調整することも可能でしょか? どうぞ宜しくお願い致します。

    • ベストアンサー
    • Flash
  • ボタンによるムービークリップ移動

    flashmx2004/actionscript2.0です。 ボタンにrollOverすると、別の場所にあるムービークリップが所定の位置まで移動する、と言う動きをさせたいと思っています。 ムービークリップがMC1としますと、単純にボタンに MC1._x=0; MC1._y=0; と指定したらその位置に移動はしますが、これのように瞬時に移動ではなく、動きがわかる程度のスピードで動くようにしたいのです。 イメージとしましては画像の上にシャッターのように次の画像が来る形にしたいのです。 フレームをあまり使わず、可能であればボタン1個で動作させたいのですが、どうにも手詰まりです。 ご教授戴ければ幸いです。

    • ベストアンサー
    • Flash
  • mcをランダムに並べたい

    winXP、flash8です。 6個のmc(h0~h5)をステージにランダムに並べるようスクリプトを考えています。 ランダムの数R[0]~R[5]までが出ています。 下記のようにx座標とy座標を決め配置したいと思ったのですが うまくいきません。 どこが、違うのか教えてください。よろしく、お願いします。 tx0 = 60; tx1 = 136; tx2 = 212; tx3 = 288; tx4 = 364; tx5 = 440; for (i = 0; i < 6; i++) { num = "_root.h" + R[i]; num._y = 76; num._x = "tx" + [i]; }

    • ベストアンサー
    • Flash
  • イメージギャラリーの最後までいったら「次へ」ボタンを消す

    イメージギャラリーを制作中です。 配置する要素は「写真」、「前へ」ボタン、「次へ」ボタン、で写真は40枚です。 写真は外部読み込みではなくてphoto_mcに入れ込んでいます。 最後の写真になったら「次へ」ボタンを消して表示されないようにしたいのですがどうしたらよろしいでしょうか? 一部ですが以下が「next_btn」のスクリプトです。 //---ボタン「next_btn」に関して--- //x座標をステージ右より55px左にする next_btn.x = stage.stageWidth-55; //y座標をステージ下より15px上にする next_btn.y = stage.stageHeight-15; ~~~~~~ //関数 nextClick の定義 function nextClick(evt:MouseEvent):void{ // 写真入り「photo_mc」内を次のフレームに戻して停止 photo_mc.nextFrame(); } 環境はWin XP、Flash CS3、actionscript3、flashplayer9 です。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • 特定のムービークリップの上で キラキラがランダムに発生

    お世話になります。 あともう少しのところでうまくいきません。 質問はタイトルの通りなんです。本や、サンプルをいろいろ研究して、 キラキラがランダムに発生するスクリプトを書いたんです。 何がしたいかというと、ムービークリップ「mc_stage」の上だけにキラキラをランダムに発生させたいんです。 sw = mc_stage._width; sh = mc_stage._height; level = 1; this.onEnterFrame = function() { if (Math.random()*10>9) { level++; newname = "Fwks"+level; Fwks.duplicateMovieClip(newname, level); this[newname]._x = Math.random()*sw; this[newname]._y = Math.random()*sh; } if (level>8) { this.onEnterFrame = undifined; } }; この形だと、mc_stageの幅と高さを取得するだけで、座標を取得していません。なので、ステージの左上からmc_stageのwidthとheightの範囲できらきらが発生してしまいます。 どうしたらきちんとmc_stageの上だけでランダムに発生させれますか?ぜひおしえてください!

    • ベストアンサー
    • Flash
  • Flashでの座標指定におけるボタン有効化

    よろしくお願いします。 現在、FLASHでゲームを作成中です。 バージョンはFLASH CS4です。 ASは2.0です。 ボタンが配置されており、更にムービークリップ(以下mc)があります。 ボタンは初めクリックできないようにしておきます(マウスに反応しない)。 mcを十字キーで移動させ、ある座標内(10<=x<=50、10<=y<=50)に入ったとき、 初めてボタンをクリックできるようにするためにはどのようにASを記述すればよいでしょうか? ifでmcが座標内に入っていたら、ボタンをenabled=trueにする感じでしょうか? ご回答よろしくお願いします。

    • ベストアンサー
    • Flash
  • 画像のランダム表示

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

    • ベストアンサー
    • Flash
  • atttachmovie で配置エリアの限定

    actionscript 初心者です。 for文の中で var x:Number = Math.floor(Math.random()*1000)-500; var y:Number = Math.floor(Math.random()*650)-325; _root.space.attachMovie("btn_mc1", "btn_mc"+i,0-i, init); _root.["btn_mc"+i]._x = x; _root.["btn_mc"+i]._y = y; というスクリプトで、btn_mcというmcをランダムに配置しています。 (このスクリプト、間違っているかもです。すみません) 配置位置は今1000px×650pxのステージ中でランダムになっているのですが これを、このステージいっぱいの楕円形があると仮定して その中にだけ、配置するということをスクリプトでできるでしょうか?? つまり、mcがぼんやりと楕円形に集まっている。。というような状態に したいのです。 楕円のマスクをかける、という方法ですと、mcが欠けてしまい、 見栄えがよろしくないです。。 よろしければ、お教えいただけると、幸いです。 お願いいたします m(__)m

    • ベストアンサー
    • Flash

専門家に質問してみよう