トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     ディスクトップのように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
ドラッグ元とドラッグ先のふたつを、単純に入替えればいいのですか?
// MovieClip: ドラッグ元インスタンス
// MovieClipアクション
var bMoveable:Boolean = true;
var nX:Number;
var nY:Number;
this.onPress = function() {
	nX = _x;
	nY = _y;
	this.startDrag();
};
this.onReleaseOutside = 
this.onRelease = function () {
	this.stopDrag();
	var my_mc:MovieClip = eval(_droptarget);
	if (my_mc.bMoveable) {
		_x = my_mc._x;
		_y = my_mc._y;
		my_mc._x = nX;
		my_mc._y = nY;
	} else {
		_x = nX;
		_y = nY;
	}
};

引用:
hiderokuさんは書きました:
WindowsのディスクトップのようにDrag&dropでアイコンの
位置が入れ替わるムービーを作ろうとしています。
(Windowsだと"アイコンの自動整列"にチェックをしてる時の動作です。)

例えば、アイコンA-B-Cと並んでいるとした場合。AをCの位置にDrag&dropすると
C-B-Aとなり、C-B-AのときにCをBの位置にDrag&dropするとB-C-Aとなるような。

「アイコンの自動整列」ですと、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オブジャクトのプロパティを理解してないんですね...

引用:
野中文雄さんは書きました:
「アイコンの自動整列」ですと、A -> CのときB-C-Aになると思うのですけど。

はい、確かに。気がつきませんでした。

野中様、ありがとうございましたっ!
野中文雄
Åê¹Æ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さんは書きました:
_droptargetを使えばできるんでは、とは思っていたのですが
_droptargetをどうやって使えばいいのかわかりませんでした。


----------------
 

hideroku
Åê¹ÆNo.20093
投稿日時: 2005-9-7 22:12
新米
居住地:
投稿: 16
使用環境:
WinXP
Flash MX2004pro
Re: ディスクトップのようにDrag&drop
野中様

参考PDFを読ませて頂きました。
MovieClip._droptargetの使い方を
覚えると結構便利そうな気がしますね。

マウスポインタの位置でドロップ先インスタンスを判別する
ことも初めて知りました。

野中様、ありがとうございます
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops