• ベストアンサー

アクションスクリプトでライブラリ中の画像を切り分けてMC化する方法

初めまして、ACEと言います。 アクションスクリプトの質問になります。 ライブラリ中にあるグラフィックを、切り分けてMC化することは可能でしょうか? 具体的には以下の通りです。 1.ライブラリ中にある画像(400x400)を100x100単位で切り分ける(16個) 2.それぞれを別々のMCにして配置 画像の切り分けができてしまえばあとはattachMovieするだけだと思っているのですが、 画像の切り分けが上手くいきません。 Bitmapクラスを使えばできそうなのですが、、、 参考になるサイト等ご教授頂けたらと思います。 以上。よろしくお願いいたします。

  • Flash
  • 回答数2
  • ありがとう数7

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

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

BitmapData クラスの loadBitmap メソッドで、ライブラリにある”ビットマップシンボル”の絵をビットマップデータとして取り込むことができます。 (グラフィック・ムービークリップシンボルの絵は loadBitmap メソッドでは取り込めません) このメソッドで取り込んだ絵を、別の BitmapData オブジェクトに copyPixels メソッドで分割コピーする、という方法はいかがでしょう。 BitmapData オブジェクトで管理する絵のデータは内部では配列変数になっていますが、操作するデータの位置を座標や大きさで扱えるように設計されています。 copyPixels メソッドは、指定の座標から任意の大きさの絵のデータを別の BitmapData オブジェクトにコピーするメソッドです。 次のように考えます。 loadBitmap でシンボルの絵を取り込んで作った BitmapData オブジェクトをコピー元にし、この一部分をコピーした BitmapData オブジェクトを 16 個、copyPixels メソッドを使って作成します。 1度 BitmapData オブジェクトを作っておけば、絵のデータは dispose メソッドで破棄するまでメモリの中に残っています。 あとはムービークリップに関連付けて表示するだけですので、attachMovie とは少々使い方が違いますが、何回でも再利用することができます。 ------------------------------------------------------------- loadBitmap メソッドを使うには、リンケージという設定が必要です。 ライブラリにあるビットマップシンボルを選んだ状態で、右クリック( Mac では control +クリック)で出すメニューから「リンケージ...」を選択してください。「リンケージプロパティ」パネルが開きます。 ” ActionScript に書き出し”にチェックを入れると、”最初のフレームに書き出し”にも同時にチェックが入ります。 ビットマップシンボルが極端に大容量のものでなければ、最初のフレームに書き出しても支障はないかと思います。 最初のフレームに書き出されると問題がある場合は他のフレームに書き出す方法もありますが、この話は割愛させていただきます。 この2つにチェックが入っていることを確認し、”識別子:”の項目に名前を入力してください。 loadBitmap メソッドでシンボルの絵を取り込む時には、ここで付けた名前を指定します。 仮に” PICTURE ”と付けたとします。 以上で準備は完了です。 次はスクリプトを書きます。 ***************************** ライブラリに、リンケージ識別子” PICTURE ”と付けた、400 × 400 ピクセルのビットマップシンボルがあるとします。 このシンボルの絵を取り込み、分割コピーして 100 × 100 ピクセル× 16 個の BitmapData オブジェクトを作成するスクリプトは、大体、次のようになります。 このスクリプトはフレームに設定してください。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)  import flash.display.BitmapData;  import flash.geom.*;  //分割したかけらの大きさを保持  piece_w = 100;  piece_h = 100;  //コピー作業に使うRectangleとPointオブジェクトを作成  rect = new Rectangle();  copy_point = new Point( 0 , 0 );  //ライブラリにあるビットマップシンボルの絵を取り込む  org_bmp = BitmapData.loadBitmap( "PICTURE" );  //画像を4×4個に16分割し、BitmapDataオブジェクトにコピーする  //オブジェクト名には左上から順に0からの通し番号を付ける  p_cnt = 0;  for( column = 0 ; column < 4 ; column++ )  {   for( row = 0 ; row < 4 ; row++ , p_cnt++ )   {    //分割したデータを保持するBitmapDataオブジェクトを作成    //指定のかけらの大きさで、透過なし    this[ "piece" + p_cnt ] = new BitmapData( piece_w , piece_h , false );    //コピー開始位置(BitmapData上の座標)とコピーする大きさの設定    rect.x = row * piece_w;    rect.y = column * piece_h;    rect.width = piece_w;    rect.height = piece_h;    //指定の位置・大きさの部分を、確保したオブジェクトにコピー    //コピーデータは左上を基点にして配置する    this[ "piece" + p_cnt ].copyPixels( org_bmp , rect , copy_point );   }  }  //コピー元のBitmapDataオブジェクトを破棄する  org_bmp.dispose(); 考えどころは、コピー元のコピー開始位置を決める部分だと思います。 このスクリプトでは、for ループを二重にし、内側のループカウンタをX方向、外側のループカウンタをY方向の位置の算出に利用しています。 コピーが済んだら、コピー元の BitmapData オブジェクト(上記のスクリプトでは org_bmp )は不要になります。 BitmapData オブジェクトは大量のメモリを占有するので、用が済んだものは dispose メソッドで破棄しておきましょう。 シンボルの絵を取り込んで分割コピーを作る作業は、普通は1回で充分だと思います。 初期化専用のフレームを作ってスクリプトを書き、2回目以降はこのフレームを再生しないタイムライン構成にすると、何回もビットマップデータを扱う処理をせずに済みます。 ***************************** 上記のスクリプトでは、シンボルの絵を取り込んで作った BitmapData オブジェクト” org_bmp ”をコピー元として、16 個のかけらに分割した BitmapData オブジェクト piece0 ~ 15 が作成されます。 piece に続く番号と絵を切り取った位置の関係は  0 1 2 3  4 5 6 7  8 9 10 11  12 13 14 15 となっています。 例えば piece4 には、左端の列で上から2番目にあたる部分の絵のデータが入っています。 BitmapData オブジェクトはメモリの中に絵のデータがあるだけなので、このままでは何も表示されません。 表示する時は、ムービークリップを用意し、attachBitmap メソッドで表示したい絵のデータを持っている BitmapData オブジェクトを関連付けます。 表示用のムービークリップはスクリプトで空っぽのムービークリップを作ってもいいですし、ステージに配置しておいたムービークリップを使うこともできます。 ここでは、空っぽのムービークリップを作って表示するスクリプトをご紹介します。 先のスクリプトに、次のようなスクリプトを追加してみてください。 スクリプトをメインのタイムラインに書いた時は、ステージの( 100 , 100 )の位置を左上として、もとのシンボルと同じ絵が表示されます。 1枚の絵に見えますが、実際は 16 個のムービークリップでできています。 ですから、ドラッグの処理などを入れると1枚ずつバラバラに動かすことも可能です。  //分割した絵を、それぞれムービークリップを作成して表示する  p_cnt = 0;  for( column = 0 ; column < 4 ; column++ )  {   for( row = 0 ; row < 4 ; row++ , p_cnt++ )   {    //空のムービークリップを作成する    clip = this.createEmptyMovieClip( "clip" + p_cnt , p_cnt );    //位置を決める    //16枚並べた画像の左上が(100,100)の位置に来るように配置    clip._x = row * piece_w + 100;    clip._y = column * piece_h + 100;    //分割したビットマップを関連付けて表示する    clip.attachBitmap( this[ "piece" + p_cnt ] , 0 );   }  } 他のムービークリップに入れ子になっているムービークリップに表示する時は、BitmapData オブジェクトのターゲットパスにご注意ください。 ------------------------------------------------------------- piece0 ~ 15 は、破棄しなければフレームやシーンを移動してもメモリの中に残っていますから、使いたいフレームにムービークリップを用意し、attachBitmap で関連付けると何度でも再利用できます。 今回は loadBitmap メソッドで、ライブラリにあるシンボルの絵を取り込んでコピー元を作りましたが。 同じく BitmapData クラスの draw というメソッドを使うと、”ムービークリップインスタンス”の絵を BitmapData オブジェクトに取り込むことができます。 loadBitmap メソッドではグラフィックシンボルの絵は取り込めませんが、グラフィックシンボルをムービークリップの中に配置して draw メソッドでコピー元を作成すると、グラフィックシンボルの絵も同様に分割できます。 他にも、外部から読み込んだ JPEG や PNG などの画像を取り込んで分割する・・・という使い方もできそうですね。 機会がありましたら、研究してみてください。

ACE_4514
質問者

お礼

質問をしておきながら全然レスつけずに申し訳ありません。 実務が忙しく試す時間もありませんが、なんとか時間を作ってやってみます。 教えて頂いた事はいずれ他の質問者にフィードバックしますので(汗 せっかく詳しく回答して頂いたのに本当に申し訳ないです。

その他の回答 (1)

noname#35109
noname#35109
回答No.2

個人的に,おそらくぜんぜん違うものを作成しようとしていて, ふと, 「たしか『ライブラリ中のグラフィックを、切り分けてMC化する』という質問があったなぁ。」 と思いだしました。 それで遅くなりましたが回答します。  ライブラリ中にあるグラフィックを、切り分けてMC化する ではなくて,  ライブラリ中にあるグラフィックを,先にMC化して切りわける ではだめでしょうか? 順番を逆にするのです。 BitmapDataクラスのスクリプトでライブラリのビットマップを表示させる以外の部分は全て古典的な手法だとは思いますが。 400×400px のビットマップ画像がライブラリに用意済であるものとし, ライブラリのビットマップには 「pict」 という識別子を付けている状態で, _root のフレーム1に "コピペするだけ" で使えるスクリプトです↓。 /////////////////////////////////////////////////////////////// // flash.display.BitmapDataクラスファイルの読み込み import flash.display.BitmapData; // bmd を作成し,ライブラリからビットマップpictを割り当てる bmd = BitmapData.loadBitmap("pict"); for (i=0; i<=3; i++) { for (j=0; j<=3; j++) { // ムービークリップpiece00~ piece33を作成 pie = this.createEmptyMovieClip("piece"+i+j, getNextHighestDepth()); // piece00~ piece33内に画像表示用MC pic_mc を作成 pic = pie.createEmptyMovieClip("pic_mc", 0); // pic_mc に bmd を割り当てる pic.attachBitmap(bmd, 0); // piece00~ piece33内にマスク用MC msk_mc を作成 msk = pie.createEmptyMovieClip("msk_mc", 1); msk._x = i*100; msk._y = j*100; msk.beginFill(0x0000FF, 100); msk.moveTo(0, 0); msk.lineTo(100, 0); msk.lineTo(100, 100); msk.lineTo(0, 100); msk.lineTo(0, 0); msk.endFill(); // pic_mc に msk_mc のマスクをかける pic.setMask(msk); // piece00~ piece33 をドラッグ可能にする(検証) pie.onPress = function() { this.startDrag(); }; pie.onRelease = function() { this.stopDrag(); }; pie.onReleaseOutside = pie.onRelease; } } /////////////////////////////////////////////////////////////// ライブラリのビットマップをムービークリップの中に呼びだして, そのムービークリップにマスクをかけただけです。 階層構造は次のようになっています(自動的にそうなるようにスクリプトを書いています)。  _root   ├ piece00   │  ├ msk_mc(マスク)   │  └ pic_mc(画像)   ├ piece01   │  ├ msk_mc(マスク)   │  └ pic_mc(画像)   ├ piece02   │  ├ msk_mc(マスク)   │  └ pic_mc(画像)   … 略 …   └ piece33      ├ msk_mc(マスク)      └ pic_mc(画像) ステージを見た場合のインスタンス名は次のようになっています。  piece00 piece10 piece20 piece30  piece01 piece11 piece21 piece31  piece02 piece12 piece22 piece32  piece03 piece13 piece23 piece33 基準点はすべて _root の (0,0) です。 ちなみに, ドラッグで各ピースが動かせますが, 「外部JPEGを動的に変えてジグソーパズルの柄をチェンジするにはどうしたら簡単だろうか?」 というような,個人的別件を考えている途中の回答なので, 検証のためドラッグ&ドロップができるようにしただけです。特に意味はありません。

ACE_4514
質問者

お礼

遅くなりまして申し訳ありません。 DPEさんへのお礼と重複してしまいますが、、 教えて頂いた事はいずれ他の質問者にフィードバックします。 せっかく詳しく回答して頂いたのに本当に申し訳ないです。 お二方ともありがとうございました。

関連するQ&A

  • actionscript2.0でMCの切り替えなど

    Flash初心者で勉強中の身なのですがどうか質問させてください。 根本的に間違っていたりできないことをやろうとしていたら申し訳ないです。。 その際にはこう改変した方がいいとのご指示をご教示頂きたいです。よろしくお願いいたします。 attachMovieを使ってライブラリ内のMCをステージに呼び出し、そのMCを押す度にそのMCを切り替えたいと考えています。 ライブラリにはa1,a2,,,a5、b1,b2,,,,b5,c1,d1,e1…という識別子をつけたMCを用意しています。 a-eの横幅は80×80です。 20ずつ間を空けて○1のMCを横一列に配置しました。 _root.attachMovie("a1", "a1",1, {_x: 100, _y: 100}); _root.attachMovie("b1", "b1",1, {_x: 200, _y: 100}); _root.attachMovie("c1", "c1",1, {_x: 300, _y: 100}); _root.attachMovie("d1", "d1",1, {_x: 400, _y: 100}); _root.attachMovie("e1", "e1",1, {_x: 500, _y: 100}); このMCを押すと、MCが数字の大きいものに切り替わる(b1を押すとb2のMCに…で5まで)ようにしたいので、 ひとつひとつを下記のscriptで記述しました。 _root.attachMovie("b1", "b1",1, {_x: 200, _y: 100}); b1.onPress=function(){ b1.removeMovieClip(); _root.attachMovie("b2", "b2",1, {_x: 200, _y: 100}); b2.onPress=function(){ b2.removeMovieClip(); _root.attachMovie("b3", "b3",1, {_x: 200, _y: 100}); b3.onPress=function(){ b3.removeMovieClip(); _root.attachMovie("b4", "b4",1, {_x: 200, _y: 100}); b4.onPress=function(){ b4.removeMovieClip(); _root.attachMovie("b5", "b5",1, {_x: 200, _y: 100});}}}} これをa-e同じことを繰り返しています。 ここからが問題なのですが、 ここで例えば a2,b5,c1,d3,e1 という風に適当に押されてMCが切り替わり、整列させるボタンが押された時、 その数字を参照して 縦に20pxずつ空けながら b5 (空行/4があった場合の行) d3 a2 c1(20pxの空白)e1 と並べ替えたいと思っています。 つまり、a-eが現在どの数字(○1,○2..)なのかを調べ、その数字の若い方から順に縦に配置させたいと考えています。 また、上のc1,e1のように1の数字のMCが2つ以上あった場合は、同じ行に20pxずつ空けて横に配置していきたいのです。 その調べた数字の順に縦と横に並べ替える(新たにステージ上に配置し直す)というルール付けをどういうscriptを書けば上手く行くかが自分ではどうにも分からず、ここから進めない状態です。。 誰がどんな回数押したとしてもそれに準じた整列をして欲しいのですが、そのやり方があるようでしたらどうかご教示頂きたいです。 また、上記の私の書き方では難しいようでしたらそこから改変したものをお教え願いたいです。 分からないことばかりで申し訳ないのですが、何卒よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • フラッシュ>>action script ボタンロールオーバーで、他のmcの画像がさしかわる方法

    すみません、大変困っています。 いま、action script2.0で Aというボタンをロールオーバーした際に、他のmcの画像がさしかわるスクリプトがわかりませんで困っています。 ソフトは、flash CS3で、scriptは2.0です 細かく説明しますと A:ボタン B:鳥の画像  C:シマウマの画像 1.ボタンAをマウスオーバー 2.鳥がシマウマに変わる 3.ボタンAをロールアウトすると元のBに戻る 大変恐縮ですが、わかるかたがいらっしゃれば教えてください。 よろしくお願いいたします。

  • FLASH アクションスクリプト

    画面のサイズを拡大縮小しても 常にセンターに表示させる アクションスクリプトで質問がございます。 back_mcが【背景】 main_mcが【オブジェクト】 _root.main_mc._x = ( Stage.width - _root.main_mc._width ) /2; _root.main_mc._y = ( Stage.height - _root.main_mc._height) /2; このアクションスクリプトで【オブジェクト】が最初から常にセンター表示になる事は分かるのですが、例えば座標x600 y500で始まるようにするのはどうしたら良いのでしょうか。 下記のアクションスクリプトでは、【オブジェクト】がx600 y500の位置に最初はあるのですが画面のサイズを拡大縮小してもピクリとも動きません。 Stage.align = "TL"; Stage.scaleMode = "noScale"; Stage.addListener(this); this.onResize = function() { _root.main_mc._x = 600;( Stage.width - _root.main_mc._width ) /2; _root.main_mc._y = 500;( Stage.height - _root.main_mc._height) /2; _root.back_mc._width = Stage.width; _root.back_mc._height = Stage.height; } this.onResize(); いまいち分かりにくい質問ですが伝わりますでしょうか。 分かる方、宜しくお願い致します。

    • ベストアンサー
    • 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
  • flashのscriptを特定のフレームに!

    flashのactionscript2.0で記述したスクリプト を特定のフレームにだけ適用したいのですが どのようにすればよいのでしょうか。 いま、シーン1のフレーム1に ライブラリからMC(ブロック)を呼び出して並べるスクリプト記述したのですが、シーン1で mcとmcが衝突したら、ほかのフレームに移動するようにしたのですが 移動先の画面にもライブラリから呼び出したMC(ブロック)が並んで表示されます。 ちなみに、シーン2をつくって移動させても同じことが起こります。 ネットのサンプルコードを利用していますが スクリプトは以下の通りです。 よろしくお願いいたします。 ofs_x = 100; ofs_y = 50; // 当たり用テーブル(1ならブロック,0なら何もなし) HitTable = [ [ 1,1,1,1,1,1,1,1,1,1 ], [ 1,0,0,0,0,0,0,0,0,1 ], [ 1,0,1,0,1,1,1,1,0,1 ], [ 1,0,1,0,0,1,0,0,0,1 ], [ 1,0,1,0,1,1,0,1,1,1 ], [ 1,0,1,0,1,0,0,0,0,1 ], [ 1,0,1,0,1,0,1,0,1,1 ], [ 1,0,1,0,1,0,1,1,1,1 ], [ 0,0,0,0,1,0,0,0,0,1 ], [ 1,1,1,1,1,1,1,1,0,1 ] ]; // ブロックを配置 var i = 0; var j = 0; var depth = 0; for(i=0;i<10;i++){ for(j=0;j<10;j++){ if(HitTable[j][i] == 1){ _root.attachMovie("block", "block" + depth,depth); _root["block" + depth]._x = i * 20 + ofs_x; _root["block" + depth]._y = j * 20 + ofs_y; depth ++; } } }

  • Action Script2.0で開発してます。

    Action Script2.0で開発してます。 CS4上であらかじめ生成してあるmcにpngファイルをロードして画像表示しています。 その後、画像の中心を基準点として縮小拡大をしたいのですが、 pngファイルをロードする時にはmcの基準点を左上に設定して位置合わせしているために、 ロード後に基準点を画像の中心に移動したいと思います。 ActionScript2.0でどのようにプログラミングすればいいのでしょうか?

    • ベストアンサー
    • Flash
  • MCを最背面に表示したい+ムービーの方向・速さを変えたい

    こんばんは。 FLASHアクションスクリプトで、以下のスクリプトを利用して、 背景にものが動いているムービーを作りたいと思っております。 ↓ライブラリにあるMCをコピーする http://hakuhin.hp.infoseek.co.jp/main/as/movieclip.html#MOVIECLIP_07 こちらのスクリプトは問題なく動作したのですが、 スクリプトの内容が把握できず、困っております。 3つのご質問がございます。 (1)質問1 シーン1の上部レイヤーに違うオブジェクトを配置しており、 その下のレイヤーに上記のMCを配置しているのですが、 再生すると上記MCの方が上レイヤーのオブジェクトより前に表示されてしまいます。 このMCを最背面に表示させたいと考えております。 (2)質問2 MCの動きをもうちょっと早くしたいと思っております。 (3)質問3 上記サンプルMCでは、左から右へ移動しているのですが、 これを、下から上へ移動させたいと考えております。 スクリプトのどの部分で操作するのか教えていただける方いらっしゃいますでしょうか? 以下、作業環境です。 ----------------------------- WinXP FLASH8 ----------------------------- どうか、よろしくお願い致します。

  • 音のアクションスクリプトについて

    ActionScriptを使った音のスクリプトについて勉強しています。ステージ上に二つの音楽プレーヤーを設置し音楽を流す、という事からはじめてみたのですが、上手く行かずに困っています。 設置した音量+/-ボタンを押すと両方の音量が変わってしまったり、片側を再生している状態で、もう一方を再生すると、もう一方は停止してしまったり(目的的には困らないのですが、本来両方とも再生され音がでているのが本来の姿のようなので)、といった状態です。 何かを間違えた理解と書き方をしていると思うのですが、間違いの指摘や音のアクションスクリプトの書き方についてご教授いただければと思い、質問させていただきました。 複数音楽プレイヤーを設置 という事がしたい場合のアドバイスやご教授をいただきたく思います。 よろしくお願いします。 ステージ  MC01(インスタンス名、I_MC01)   L__MC再生ボタン(インスタンス名、I_saisei)   L__MC音量+ボタン   L__MC再生-ボタン  MC02(インスタンス名、I_MC02)   L__MC再生ボタン(インスタンス名、I_saisei)   L__MC音量+ボタン   L__MC再生-ボタン と二つのシンボルがステージ上に配置し、各MCに再生ボタンと音量+/-ボタンを配置しています。 MC01 onClipEvent (load) {    Hsound_MC01 = new Sound(I_MC01);    Hsound_MC01.attachSound("RS_MC01"); } MC再生ボタン onClipEvent (load) {    Hvol= 50; } on (release) {    _root.I_MC01.Hsound_MC01.stop();    _root.I_MC01.Hsound_MC01.start(); } onClipEvent (enterFrame) {    _root.I_MC01.Hsound_MC01.setVolume(this.Hvol); } MC音量+ボタンon (release) {    if (_root.I_MC01.I_saisei.Hvol<100) {       _root.I_MC01.I_saisei.Hvol += 10; } } と書きました。MC02も同じで、01と02が違うだけです。

    • ベストアンサー
    • Flash
  • ScrollPaneからmcをドラッグして外に出したい

    たとえば50個のmcから好きな5つを選んで、順番に決められた場所へドロップできる swfムービーを製作しています。 50個のmcはswfムービーの領域には並べ切れなかったので、ScrollPane内に 並べようと考えました。Flashのライブラリウィンドウからステージ上に インスタンスをドロップできるのと似たインターフェイスです。 左側50%に“ドロップ領域”右側50%に“ScrollPane”を配置しました。 Flash MX 2004 Pro 環境で、_rootにScrollPaneを配置。縦方向にスクロールさせます。 そのcontentPathに設定したmc上に、50個のmc(obj_mc)をattachMovie()しました。  this.content.attachMovie("obj_mc",objName,objDepth); このobj_mcをドラッグし、左側の“ドロップ領域”(ScrollPaneの外)にドロップ したいので、obj_mcでstartDrag()を呼び出します。 しかしScrollPaneの外へドラッグしていくと、obj_mcはScrollPaneの“裏側”に 入ってしまい「ScrollPaneの外へ出す」ことは出来ません。 たとえばswapDepth(_root.getNextHighestDepth())しても、上には出ません。 これを回避して、外に出す為の考え方を、どなたか教えてもらえませんでしょうか? obj_mcのonPress時に、ScrollPaneから“切り離す”ことが出来ればよいのでは ないかとは思っているのですが…。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 複数のMC(ドラッグで移動可能)から等しい距離にMCを配置したい

    ドラッグで移動可能な複数のムービークリップから等しい距離の位置にムービークリップを配置したいです。 以下『複数』が3つの場合を例にします。 MC4はMC1、MC2、MC3がドラッグで移動されると、MC1、MC2、MC3への距離が等しい位置(厳密に等しくなくても良い)に移動させたいです。(結果、MC4はMC1、MC2、MC3を三角形とした際の重心点上に配置される) オーサリングツールは『ParaFla!』ActionSctiptは1.0相応で以下の様に作ってみましたが、いつまで経っても落ち着かないので改善したいです。 ※スクリプトのスペースは全角で記述。 ■MC1、MC2、MC3 _root上にMC1を深度0、[固定]で配置。 _root上にMC2を深度1、[固定]で配置。 _root上にMC3を深度2、[固定]で配置。 MC1,MC2,MC3にテキストで●を配置。 MC1,MC2,MC3に以下スクリプトを記述。 on (press){  this.startDrag(); // ドラッグを開始する } - on (release, releaseOutside){  this.stopDrag (); // ドラッグを解除する } ■MC4 _root上にMC4を深度3に配置。 MC4にテキストで○を配置し、以下スクリプトを記述。 onClipEvent (enterFrame){  long=0;  short=0;  for(i=1;i<=3;i++){   mc=eval('_root.MC'+i);   length=Math.sqrt((mc._x-_x)*(mc._x-_x)+(mc._y-_y)*(mc._y-_y));   if(long<=length){    long=length;    long_mc=mc;   }   if(short>=length||short==0){    short=length;    short_mc=mc;   }  }  _x += ((long_mc._x+short_mc._x)/2 - _x)/5;  _y += ((long_mc._y+short_mc._y)/2 - _y)/5; } 上記のようにして作成したものを以下に置きます。 http://carken.web.fc2.com/osiete/test3.html 動かしてみると、いつまでたっても、細かく動いて止まってくれません。 厳密に同じ距離でなくても良く、ある程度見た目にOKかなってところで止まるようにしたいです。 アドバイスありましたら、よろしくお願いいたします。 参考 『2つのMC(ドラッグで移動可能)から等しい距離にMCを配置したい』(http://oshiete1.goo.ne.jp/qa4328262.html)

    • ベストアンサー
    • Flash