• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:actionscript2.0で動的な位置変化)

actionscript2.0で動的な位置変化

BlurFiltanの回答

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

#1です。 返事が遅くなってしまいましたが。 > 01234 > 56789 > > が > > □□□3 4 > 5 6 7 8 9 > 0 1 2 なるほど, #1のスクリプトだと確かにそうなりますね。 私の確認不足でした。 すみません。 それではスクリプトを次のように変更してみてください。 //----------------------------------------------- //「bg○」の参照を入れる配列を用意 var objA:Array = new Array(2*5); //「bg○」の座標を入れる配列を用意 var posA:Array =[ [70, 112], [106, 112], [142, 112], [178, 112], [214, 112], [70, 148], [106, 148], [142, 148], [178, 148], [214, 148], [70, 184], [106, 184], [142, 184], [178, 184], [214, 184], [70, 220], [106, 220], [142, 220], [178, 220], [214, 220] ]; //「bg○」の入る位置番号を入れる配列を用意 var numA:Array = new Array(objA.length); //「bg○」の生成&配置 for (var i:Number=0; i<objA.length; i++) { objA[i] = _root.attachMovie("bg", "bg"+i, i+100); //●動作確認用(本題とは関係なし) //objA[i].createTextField("tf",0,-15,-15,24,24); //objA[i].tf.text = i; objA[i]._x = posA[i][0]; objA[i]._y = posA[i][1]; } //「hitBar」をドラッグできるようにする hitBar.onPress = function():Void{ this.startDrag(); }; hitBar.onRelease = hitBar.onReleaseOutside = function():Void{ this.stopDrag(); }; //毎フレーム実行 this.onEnterFrame = function():Void{ //配列「numA」の初期化と「bg○」の配置 for (var i:Number=0; i<objA.length; i++) { numA[i] = i; objA[i]._x = posA[numA[i]][0]; objA[i]._y = posA[numA[i]][1]; } // //「bg○」に関するループ for (i=0; i<objA.length; i++) { //「bg○」が「hitBar」にヒットしている間はループ while(objA[i].hitTest(hitBar)){ //★ j:Number=0; を j:Number=i; に変更 for (var j:Number=i; j<objA.length; j++) { numA[j]++; //★座標移動をココから削除(下に移動) } //★この for 文を付け足し for (j=0; j<objA.length; j++) { //★座標移動 objA[j]._x = posA[numA[j]][0]; objA[j]._y = posA[numA[j]][1]; } } } }; //----------------------------------------------- 変更したのは ★ を付けた部分で,その他は基本的にそのままです。 (● を付けてコメントアウトしてある部分は,私自身のための動作確認用スクリプトです。)

bzblood
質問者

お礼

お礼が遅くなりまして申し訳ありません! わざわざこちらの要望に合わせて改変してくださってありがとうございます…! お陰様で無事に動作させることができました。 本当に感謝感激です。ありがとうございました!

関連するQ&A

  • actionscript2.0で空の配列を詰めたい

    actionscript勉強中の初心者の身ですがどうかご教授下さい。 Photo1~10と名前のつけたMCを順に並べ、そのMCを押すとリムーブします。 そのリムーブしたMCの間を詰め、残ったものに順に1~また名前を振っていきたいと考えています。 例: Photo1 Photo2 Photo3→リムーブする Photo4→リムーブする Photo5 ↓ Photo1 Photo2 Photo5 ↓ 間を詰めて名前を振り直す Photo1 Photo2 Photo3(元5) これを配列を使ってやっているのですが、どうしても空の配列が出来てしまって、上手く希望通りになりません。 間を詰めるところまではたどり着いたのですが、それでも空の配列が前に詰められ、後ろに並び替えられたMCが配置されるというどうにも中途半端にしかできないでいます… 上の例でいきますと、 (空の配列) (空の配列) Photo1 Photo2 Photo5 という状態です。 この空白の配列を詰めて、Photo1~順に名前を振り直していきたいと思っています。 今後どんな風にスクリプトを書けばいいのか、もしくはもしこの方法では希望の動きが出来ないようであれば、どう変えればいいのかをどうか教えて頂きたいです。 分かりづらいとは思いますが、何卒よろしくお願いいたします。 var clip_addr:MovieClip = _root; var list:Array = new Array(); //2段にMC"Photo1~10"を順々に並べていく objA = new Array(2*5); D = 1; sy = 40; for (y=0; y<2; y++) { sx = 40; for (x=0; x<5; x++) { objA[D] = _root.attachMovie("Photo"+D, "Photo"+D, D+100); objA[D]._x = sx; objA[D]._y = sy; D++; sx += 100; } sy += 100; } //リストにrefを記録 //MCを押すとリムーブする for (i=1; i<=10; i++) { ref = clip_addr["Photo"+i]; list[i] = {clip:ref}; ref.onPress = function() { this.removeMovieClip(); }; } //naraというMCを押すと消された番号を詰めて並び変わる(並び変わる場所はテスト段階なので適当に配置) nara.onPress = function() { for (i=1; i<=10; i++) { list.sortOn("clip",Array.NUMERIC); trace(list[i].clip) mog = list[i].clip mog._x = 100*i; mog._y = 10*i; } }; ↑最終的に上の処理にリネームの要素を加えていきたいと考えています。

  • actionscript3.0 について

    今回、flashでサイトを作る事になり、actionscript3.0苦戦しています。 クリックした所にムービークリップを再生するというスクリプトを書きたいのすが、調べても、調べても解決できません。もしよろしければ、教えていただけないでしょうか。 本当に初心者の質問で申し訳ないです。やり方を知っていて、こういうサイトで勉強すればその仕組みは作れるよ、と、言うヒントでも良いのでよろしくお願いします。

  • モーショントゥイーンの代わりにactionscriptで

    タイムラインに配置したムービークリップを モーショントゥイーンではなくactionscriptで 上下に動かしたいのですが どのような記述をしたら良いのかわかりません。 ご存知の方がいましたらお教えください。

    • ベストアンサー
    • Flash
  • マウスカーソルについてくる前に左上にいってしまう。

    こんにちは。 マウスカーソルについてくるムービークリップをマスクにして使用したいため、 目的のムービークリップに onClipEvent (enterFrame) { _x += _xmouse/3; _y += _ymouse/3; } というActionScriptを入れました。 きちんと思うように動くのですが、 読み込んだあと、一瞬まず左上に移動してしまいます。 マウスカーソルをうごかして、はじめてマウスカーソルに近づいてきます。 左上に移動してしまうのは格好が悪いので、配置した位置からマウスカーソルに近づいて欲しいのですが、色々調べてもその説明がありません。 どうかよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • Flashでボタンをつくっているのですが、actionscriptをつ

    Flashでボタンをつくっているのですが、actionscriptをつかってボタンをクリックさせたいのですが、アクションパネルのところに「現在の選択範囲にアクションを割り当てることはできません。」と表示されてしまいます。 参考書に附属されているflaをみたところ、Actionscript1.0、2.0となっているのですが、作成しているのはActionscript3.0で作っています。 ====== on (release) { /*↑ボタンが押されて離されたら*/ _parent.gotoAndPlay("about"); /*↑「about」ラベルへ移動*/ } ====== このようなscriptをいれたいのですが、うまくいきません。 ムービークリップでボタンを作るまではできました。その後、何かが抜けているのかして上記のようなエラーがでます。 flash初心者のため、どういう風に書いて質問させていただいたらよいのかわからないのですが、参考flaと見比べたときに「シンボル定義」のなかにあるムービークリップがひとつたりませんでした。(このムービークリップは「navigation」というものですのでそれがありません。) 質問するにはあまりにも情報が少ないかもわかりませんが、何卒ご教授いただけると大変助かります。 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • AS2 for文内のfunctionがうまくいきません

    今までフレームアクションと配布されているActionScriptの簡単なカスタマイズ程度しかしたことがないActionScript初心者です。 現在ActionScriptを使いこなせるようになるように勉強中なのですが、途中で躓いている部分があり、先に進めません。 ご存知の方、ご教授して頂けると幸いです。 ■したいこと 1.ライブラリから横一列にMC(btn_mc)を配置 2.btn_mc内にそれぞれサムネイル画像を読み込む 3.btn_mcをクリックするとサムネイルの拡大画像がnull_bgに読み込まれる といった簡易的なアルバムを作っている途中です。 ■スクリプト bar = menu_mc.content_mc.menu_bar; objA = new Array (); i = 0; sx = 0; for (x = 0; x < 33; x++) { str = "btn_mc" + String (i); objA[i] = bar.attachMovie ("btn_mc", str, i + 1); objA[i]._x = sx; sx += 80; var mc_name = "img/" + x + ".jpg"; bar[str].null_mc.loadMovie (mc_name); bar["btn_mc" + i].onRelease = function () { null_bg.loadMovie (mc_name); }; i++; } ■参考URL http://ft-lab.ne.jp/cgi-bin/wiki.cgi?page=%A5%E0%A1%BC%A5%D3%A1%BC%A5%AF%A5%EA%A5%C3%A5%D7%A4%CE%CA%A3%C0%BD_Flash こちらの「敷き詰め」を参考にしています。 ■環境 WINDOWS XP Adobe FLASH CS3 Professional ■躓いている点 したいこと2のサムネイル画像を読み込むところまでは成功したのですが、その先の「btn_mcをクリックするとサムネイルの拡大画像がnull_bgに読み込まれる」がうまくいきません。 traceで調べてみると、クリックしたMC・読み込み画像がどちらも「x」が33になってしまっているのですが、これはどうしてなのでしょうか? 初めての質問なので、文章に解り辛い点・不備があるかもしれませんが、どうぞよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • actionscript 2.0 配列型変数をグローバル変数として扱いたい。

    action script2.0で ある変数を、共有しようと、ムービークリップに _global.hoge = _name(ムービーのインスタンス名); というような記述をしました。 すると、たしかにほかのどのムービークリップでも hogeという値は取り出すことができました。 ところが、インスタンスはひとつではなく複数あるため、 _global.hoge = _nameが記述されているムービークリップがいくつもあると、 次々上書きされ、結局hogeは、最後に読み込んだ _nameの値が入ってしまうという現象が起きたのです。 そこで _global.hoge[_name] = _name; というような、変数名がかぶらぬよう配列に変更してみました。 ところが、また問題が発生しました。 なぜか、配列だと頭に_globalとついていても グローバル変数として扱ってくれず、 ほかの場所で hoge[1] 等と記述しても全く値が取り出せないのです。 また、同ムービークリップ内ではちゃんと取り出せました。 どうすれば、配列変数をグローバル変数として 扱うことができるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • 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
  • ActionScript 2.0 再生・停止

    クリックで特定のムービークリップが再生・停止するスクリプトをAS2.0(ActionScript 2.0)で記述したいです。 現在はAS1.0で下記のようにムービークリップに記述しています。 これをAS2.0に直すとどのような記述になるでしょうか。宜しくお願いいたします。 onClipEvent (load) { mode = true; } on (release) { mode = !(mode); if (mode) { this.play(); } else { this.stop(); } }

    • ベストアンサー
    • Flash
  • Flash フレームを指定してムービークリップ再生

    ActionScript超初心者です。 よろしくお願いします。 ステージ上にボタン「A」「B」「C」を配置、 ボタン脇のスペースにムービークリップを配置、各ボタンで切り替え再生させたいと思っています。 2フレーム目に簡単なアニメーションのムービークリップ「animA」を、 3フレーム目に同様の「animB」4フレーム目に「animC」を配置し、 各ボタンon (release)で各ムービークリップの再生をしたいのですが うまくいきません。 どこにどのようなスクリプトを書けば良いか教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Flash