• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:actionscript2.0でMCの切り替えなど)

Flash初心者のためのMCの切り替え方

DPEの回答

  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

作り方の一例です。 aの1 ~5までの絵を1フレームに1つずつ配置したムービークリップを作り、リンケージ名を”a”にします。 この時、それぞれの絵の左上が、編集画面にある+印の角に来る(絵の左上がX= 0、Y= 0 になる)ように配置してください。 残るb~eも同様に、同じ名前の絵を1つのムービークリップにまとめ、リンケージ名を”b”や”e”にします。 「整列」のボタンを作り、ステージに配置してインスタンス名を付けます。 ここでは仮に”align_btn”とします。 メインのタイムラインに次のスクリプトを記述し、プレビューで確認してみてください。 ムービークリップをクリックすると絵が変わり、「整列」ボタンを押すと、上から5番を表示しているものから順に、横の並びは名前の順に並びます。 (↓ 各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください) /*  初期設定 */ //ムービークリップ(MC)の大きさ var clip_w:Number = 80; var clip_h:Number = 80; //配置する際の基準の座標と余白(縦横兼用)の大きさ var org_x:Number = 100; var org_y:Number = 100; var margin = 20; //MCの種類と絵柄の数 var type_max:Number = 5; var pic_max:Number = 5; //MCがあるタイムラインを保持 var clip_addr:MovieClip = _root; /*  MCの画像を切り替える関数 */ function Change_Frame():Void {  //次のフレームに進める  //最後まで行ったら1に戻る  this.gotoAndStop( ( this._currentframe % this._totalframes ) + 1 ); } /*  並べ替えを行う関数 */ function Clip_Align():Void {  var i:Number , j:Number , px:Number;  var ref:MovieClip;  //表示フレームを順に調べ、表示しているMCがあれば横に並べる  for( i = pic_max ; i >= 1 ; i-- )  {   //全てのMCをチェック   for( j = 0 , px = 0 ; j < type_max ; j++ )   {    //操作するMCの参照を作成    //97は”a”の文字コード    ref = clip_addr[ String.fromCharCode( 97 + j ) ];    //該当するMCがあった場合、横に並べていく    if( ref._currentframe == i )    {     ref._x = ( clip_w + margin ) * px + org_x;     ref._y = ( clip_h + margin ) * ( pic_max - i ) + org_y;     //次のためにpxを更新     px++;    }   }  } } /*  セットアップ */ function SetUp() {  var i:Number;  var name_str:String;  var ref:MovieClip;  //MCのセットアップ  for( i = 0 ; i < type_max ; i++ )  {   //MCを挿入し、フレーム1で止めておく   name_str = String.fromCharCode( 97 + i ) ;   ref = clip_addr.attachMovie( name_str , name_str , i );   ref.gotoAndStop( 1 );   //ボタン機能を定義   ref.onPress = Change_Frame;  }  //位置を決める  Clip_Align();  //「整列」ボタンの機能を定義  align_btn.onRelease = Clip_Align; } //セットアップを実行 SetUp(); * * * * * 字数制限の都合上、詳細は次の回答で説明いたします。

関連するQ&A

  • MC間でMCをやり取りできますか?

    質問は初めてですがよろしくお願いします。 深度入れ替えの関係で(簡略化のため)、MCを似たような深度ずつに親MCにまとめる構造で作成してきました。 しかし、このやり方では、当初予定していた深度の移動はできますが、予定外の深度の移動が、不可能になりました。 やりたいこと _root.a.mc のような構造の中のmcというムービークリップを、 _root.b.mc の階層に移動したいのです。mcの持つ変数等も一緒に移動できるのが好ましいです。 不可能であれば、 attachMovie()、removeMovieClip()あたりを使って負荷のかかりそうなやり方で我慢しようとは思っています。 ParaFla!使用・SWF8:FLASH8相当の設定で製作中

    • ベストアンサー
    • Flash
  • ActionScript2.0のイベントについて

    親ムービークリップに配置した子ムービークリップのイベントが実行されなくて困っています。 親ムービークリップ自体には下記のイベントを設定しています。親ムービークリップはattachMovieで動的に配置しています。 onRollOver・・・onEnterFrameを設定 onRollOut・・・onEnterFrameを削除 子ムービークリップを配置して子ムービークリックにイベントを設定しました。onEnterFrameをは実行されますが、onReleaseが実行されず困っています。 function Parent() { this.onRollOver = function() { this.onEnterFrame = function(){・・・} } this.onRollOut = function(){ delete this.onEnterFrame; } this["child_mc"].onRelease = function() { trace('a') // 実行されない } this["child_mc"].onEnterFrame = function() { trace('b') // 実行される } } ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ _root.attachMovie("Parent", "parent_mc", _root.getNextHighestDepth(), new Parent()); 子ムービークリップはオーサリングで静的にParentに配置し、プロパティでchild_mcと設定しています。 onReleaseは実行できず、そこで止まっています。 なんでも良いので教えてください。

    • ベストアンサー
    • Flash
  • 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; } }; ↑最終的に上の処理にリネームの要素を加えていきたいと考えています。

  • actionscript1.0でJPGを読み込んでるところをSWFに、

    actionscript1.0でJPGを読み込んでるところをSWFに、、、 初心者のため良く分からないため質問いたします。 FLAを開くと設定はFlashのactionscript1.0 パブリッシュ設定がFlash Player8.0でした。 現在上記設定で下記scriptが書かれているものをFlashCS4で開いています。 そして現在3つのJPGを読み込んでいるのですが、そこをSWFに変更したいと考えています。 現在はAS1.0ですが、これを機会にAS3.0に変えたいとも考えています。 どう調べていいか分からないので質問させていただきました。 質問自体よく分からないかもしれませんが、非常に困っています。 よろしくお願いいたします。 onClipEvent (load) { Pass = "img_top_flash/"; Timer = _root.Sec*30; cnt = 0; this._y = 300; //元はthis._y = -20; this.loadVariables( Pass + "top_flash_url.txt"); function loadJPG() { _root.Loaded = false; cnt = 0; if (num == Max) { num = 0; } else if (num<0) { num = Max-1; } depth++; if (depth>1) { _root.mc["m"+(depth-2)].removeMovieClip(); } navi.slider._alpha = 100; mcName = "m"+depth; _root.mc.attachMovie("pic",mcName,depth); _root.mc[mcName].fileName = Pass+picArray[num]+".jpg"; for (i = 0; i < Max; i++) { if (i == num) { navi.mc["b"+i].gotoAndStop(2); } else { navi.mc["b"+i].gotoAndStop(1); } } } } onClipEvent (data) { picArray = files.split(","); Max = picArray.length; for (i = 0; i < Max; i++) { mcName = "b"+i; navi.mc.attachMovie("navi_btn",mcName,i); navi.mc[mcName].num = i; navi.mc[mcName]._x = i*20; } navi.mc.attachMovie("sankaku","sankaku",Max); navi.mc.sankaku._x = Max*20; num = depth = 0; loadJPG(); } onClipEvent (enterFrame) { if (Max>1 && _root.Loaded) { //this._y -= this._y/4; this._y -= this._y/100; if ( this._y <= 280 ) { this._y = 280; } navi.slider._x += (num*20-navi.slider._x)/_root.spd; navi.slider._alpha += (50-navi.slider._alpha)/_root.spd; cnt++; if (cnt>Timer) { num++; loadJPG(); } } }

    • ベストアンサー
    • Flash
  • MCのクリックした部分をゆっくり中央に移動させたい。

    back_mcをサイズ(600,400)のシーン上に配置し、 シーンに下記フレームスクリプトを記入し、 MCのクリックした部分を中央に移動させましたが、 これを緩やかに移動させるにはどのようにすればよいでしょうか? back_mc.onRelease = function () { _root.back_mc._x = _root.back_mc._x +(300 - _root._xmouse); _root.back_mc._y = _root.back_mc._y +(200 - _root._ymouse); }

    • ベストアンサー
    • Flash
  • Actionscriptで座標指定

    はじめまして。 WinXP・Flash MXの環境で作業しています。 動きとしては、[a_mc]と言うMCがある距離動いたら、B秒止まるというような動きをしていて ボタンにマウスが乗ると指定した座標にスライド移動してMCの動きは止まる。 そしてボタンからマウスが離れたら、静止した場所から再びある距離動いたら、B秒止まるという動きが再開される というものを考えています。 [a_mc]のMC構造は レイヤー1に縦に7枚つなげた画像を配置 レイヤー2の1フレーム目に Y_dif = (Y_Pos-_y)*0.6; _root.Slide._y = Number(Y_dif)+Number(_y); と言うアクションを配置。 2フレーム目にgotoAndPlay(1);のアクションが配置してあります。 シーン1にの レイヤー1に[a_mc]のMCを配置。インスタンス名はSlideにしています。 レイヤー2にはボタンが7つ配置してあります。 [a_mc]のMCにアクションは onClipEvent (load) { function replace() { if (_y>=-1680) { _y = _y-2; } else if (_y<-1680) { _y = 0; } } } onClipEvent (enterFrame) { replace(); } と入れているのですが、何秒間止まるなどの入れ方がうまく分かりません。 (※getTimerなど使うのかななど色々試しているのですが…) ボタンのアクションは on (rollover) { _root.Slide.Y_Pos = 4; } on(rollOut){ _root.Slide.replace(); } としているのですが、ピクっと動いてすぐ止まってしまいます。 現状このような感じになっています。 ムービーのスクロールをB秒止める方法とrolloutすると続きがスクロールする方法はどうやるのでしょうか? 長々と申し訳ありませんが宜しくお願い致します。

    • ベストアンサー
    • Flash
  • 複製したMCを指定した座標へ配置したいのですが

    こんにちは。 初歩的な質問で申し訳ないのですがよろしくお願いします。 attachMoiveでライブラリ内のMCを数十個複製しそれらをステージ内に 配置する際、4x4、6x6といったように均等に数十個配置する事は 出来るのですが均等に配置するのではなく自分の指定した座標に 1つ1つ配置したいのです。 色々調べましたら、自分の配置したい各場所の各座標(x,y)を 配列を使い変数にするのだと思い、自分なりに作ってみましたところ 1つは指定した座標に配置出来たのですが2つ目以降が上手く 配置出来ません。 var i; var num=50; //複製するmcの数 var pos = {x:50, y:100}; //1つ目の指定座標。              //ここで残り49個のmcの座標も指定。 for (i=0; i<num; i++) { _root.attachMovie("mc", "mc"+i, i); var mc_obj = eval("_root.mc"+i); mc_obj._x = pos._x; mc_obj._y = pos._y; } 一応頭の中ではこういうスクリプトを考えてますが多分間違いが あり何かが足りないのだと思います。 var posのところで2つ目以降の座標の指定の仕方と forの中でmc_obj._xとmc_obj._yにどのように50個分指定した 座標へ配置設定をしてやるのかお分かりくださる方がいらっしゃれば ご教授くださいますようよろしくお願いします。

    • ベストアンサー
    • 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
  • フレーム上から書くfunctionについて

    ステージ上に二つのMCを用意し、一つをインスタンス名 MC01 とし、もう一つをインスタンス名 MCbutton としました。 MCbuttonをクリックすると、右に5、下に5移動するというものをつくるため、以下のようなASを書いたとします。 function F_idou01(){ MC01._x += 5; MC01._y += 5; } _root.MCbutton.onPress = function(){ F_idou01; } しかし、動きません。これはなぜなのでしょうか? 上記の場合、_root.MCbutton.onPress = F_idou01; と書けば良い事はわかってはいるのですが、_root.MCbutton.onPress でいくつもの動作を実行させるのと同時に、F_idou02も使用したい場合はどのようにASを書けばよいのでしょうか。 ご解説やアドバイスをいただきたく思います。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • すべてのMCを1フレーム目へ

    ステージ上にMCのインスタンスが100個あるとします。 ボタンのクリックで全部のMCを1フレーム目へ移動させたいと思っています。 _root.EVENT_btn.onRelease = function() { _root.A_mc.gotoAndStop(1); _root.B_mc.gotoAndStop(1); _root.C_mc.gotoAndStop(1); _root.D_mc.gotoAndStop(1); : : } とひとつずつ書くしかないのでしょうか? ほかに効率のよい書き方はありますか? (注)すべてのインスタンスの親は同一オブジェクトではありません。

    • ベストアンサー
    • Flash