メイン コーダーズルーム【スクリプト系】 ディスクトップのようにDrag&drop | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
hideroku | Åê¹ÆNo.20067 投稿日時: 2005-9-6 16:48 |
新米 居住地: 投稿: 16
使用環境:
WinXP Flash MX2004pro |
ディスクトップのようにDrag&drop 皆さん、こんにちは。
WindowsのディスクトップのようにDrag&dropでアイコンの 位置が入れ替わるムービーを作ろうとしています。 (Windowsだと"アイコンの自動整列"にチェックをしてる時の動作です。) 例えば、アイコンA-B-Cと並んでいるとした場合。AをCの位置にDrag&dropすると C-B-Aとなり、C-B-AのときにCをBの位置にDrag&dropするとB-C-Aとなるような。 完成形としては9つほどのMCを配置して上記のような動作を実現させたいのですが どのような方法をとれば出来るのか考えつきません(配列を使って参照しながら..等、 考えたのですが)。 皆さんのお知恵をお借りしたいと思い投稿しました。 よろしくお願いします。 お見せするほどではないとは思いますが... MCを2つ置いた場合は上記の動作を実現させることは出来ました。 一応、ムービー(FLA含む)をUPしておきます。 |
グッピー堀内 | Åê¹ÆNo.20068 投稿日時: 2005-9-6 17:52 |
常連 居住地: 都内某駅前 投稿: 68
使用環境:
Win2000, Flash MX 2004 MacOSX, Flash MX 2004 |
Re: ディスクトップのようにDrag&drop こんなのはいかがでしょうか?
ドラッグ対象のMCが_root直下にあるとして _rootのフレームに var target_mc_List:Array = new Array(); function add_target_mc(target_mc:MovieClip){ var len:Number = target_mc_List.length; target_mc_List[len] = new Object(); target_mc_List[len].Mc = target_mc; target_mc_List[len].x = target_mc._x; target_mc_List[len].y = target_mc._y; return (len); } function HitCheck(target_mc:MovieClip){ for(var i = 0; i < target_mc_List.length; i++){ if(target_mc_List[i].Mc.hitTest(target_mc) && target_mc_List[i].Mc != target_mc){ var buf_ID = target_mc.ID; target_mc.ID = target_mc_List[i].Mc.ID; target_mc_List[i].Mc.ID = buf_ID; for(var mc in this){ this[mc]._x = target_mc_List[this[mc].ID].x; this[mc]._y = target_mc_List[this[mc].ID].y; } return; } } //元の位置に戻る target_mc._x = target_mc_List[target_mc.ID].x; target_mc._y = target_mc_List[target_mc.ID].y; } として ドラッグターゲットのMCのフレームに var ID = _parent.add_target_mc(this); this.onPress = function (){ this.startDrag(); } this.onReleaseOutside = Up; this.onRelease = Up; function Up(){ this.stopDrag(); _parent.HitCheck(this) } こんな感じで書いてみてください。 それで、ドロップ対象のMCをあちこちに配置してD&Dしてみてください。 多分動くんでないかと思います。 念のためサンプルファイルおいときます。 http://www.radiobot.net/sample/D_and_D.lzh |
野中文雄 | Åê¹ÆNo.20071 投稿日時: 2005-9-6 20:00 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: ディスクトップのようにDrag&drop ドラッグ元とドラッグ先のふたつを、単純に入替えればいいのですか?
引用: hiderokuさんは書きました: 「アイコンの自動整列」ですと、A -> CのときB-C-Aになると思うのですけど。その場合には、配列で全体の並び順を管理する必要があるでしょう。 引用: 完成形としては9つほどのMCを配置して上記のような動作を実現させたいのですが |
hideroku | Åê¹ÆNo.20072 投稿日時: 2005-9-7 0:03 |
新米 居住地: 投稿: 16
使用環境:
WinXP Flash MX2004pro |
Re: ディスクトップのようにDrag&drop グッピー堀内様、回答ありがとうございます。
バッチリ、自分が思っていた動作をしています。 また、サンプルまで作っていただきありがとうございます。 未だにActionScript2.0は勉強していないので 最初、何が書いてあるか理解できませんでしたが ActionScript2.0関連の参考書を本屋に買いに行き、 その参考書を片手になんとなくですが理解できてきました。 おかげでActionScript2.0も勉強しなくちゃなと思いました。 グッピー堀内様、ありがとうございましたっ! |
hideroku | Åê¹ÆNo.20074 投稿日時: 2005-9-7 0:09 |
新米 居住地: 投稿: 16
使用環境:
WinXP Flash MX2004pro |
Re: ディスクトップのようにDrag&drop 野中様、回答ありがとうございます。
引用: 野中文雄さんは書きました: はい、まさしくその通りです。 野中様に書いていただいたスクリプトでバッチリ自分が思っていた動作をします。 _droptargetを使えばできるんでは、とは思っていたのですが _droptargetをどうやって使えばいいのかわかりませんでした。 というかMovieClipオブジャクトのプロパティを理解してないんですね... 引用: 野中文雄さんは書きました: はい、確かに。気がつきませんでした。 野中様、ありがとうございましたっ! |
野中文雄 | Åê¹ÆNo.20079 投稿日時: 2005-9-7 6:15 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1) |
Re: ディスクトップのようにDrag&drop MovieClip._droptargetは古いプロパティ(Flash Player 4以降)なので、少しくせがあります(参考PDF/約196KB)。通常は、eval()関数とセットで使います。
また、MovieClip同士の重なりでなく、マウスポインタの位置でドロップ先インスタンスを判別します。今回の場合、複数のインスタンスと重なることがありえそうです。そのため、MovieClip._droptargetの方が適しているように思いました(MovieClip.hitTest()メソッドでは、判定の順序によって、どれかひとつが決定されます)。 引用: hiderokuさんは書きました: |
hideroku | Åê¹ÆNo.20093 投稿日時: 2005-9-7 22:12 |
新米 居住地: 投稿: 16
使用環境:
WinXP Flash MX2004pro |
Re: ディスクトップのようにDrag&drop 野中様
参考PDFを読ませて頂きました。 MovieClip._droptargetの使い方を 覚えると結構便利そうな気がしますね。 マウスポインタの位置でドロップ先インスタンスを判別する ことも初めて知りました。 野中様、ありがとうございます |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |