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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     loadMovieで読み込んだswfをドラッグ
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
10-feet
Åê¹ÆNo.38360
投稿日時: 2008-4-8 15:02
新米
居住地:
投稿: 25
使用環境:
WinXp,Flash CS3 Pro,AS2.0
player8
loadMovieで読み込んだswfをドラッグ
こんにちは、feetです。

ムービーが再生された時、画面上に複数のウィンドウが表示されていて
それぞれがマウスでドラッグできる・・・
ということを目指してFlashを製作してましたが、ドラッグの部分で
わからないことが出来たので質問させていただきます。

_root上にdamyという空のMCを複数配置して、loadMovieを使って他のswfファイルを
damyに読み込ませることをやっています。
damyにはそれぞれ違うインスタンス名がついています。
loadMovieはメインタイムラインの1フレーム目で行っています。
後は2フレーム?5フレームの繰り返し再生です。

このdamyには以下のことが記述されてます。

onClipEvent (load) {
}
onClipEvent (mouseDown) {
	if(this.hitTest(_root._xmouse,_root._ymouse)){
		this.startDrag();
		this.swapDepths(0);
	}
}
onClipEvent (mouseUp) {
	this.stopDrag();
}

これでドラッグして移動はできたのですが
MCが重なった時に、隠れているMCが優先されて移動対象になってしまいます。
loadMovieはちゃんと機能してます。
深度が原因かなと思い、深度をもたせる変数「depth = 0」を
メインタイムラインの1フレーム目で宣言し

onClipEvent (load) {
}
onClipEvent (mouseDown) {
	if(this.hitTest(_root._xmouse,_root._ymouse)){
		if( _root.lock_flg_main == false ){
			this.startDrag();
			this.swapDepths(_root.depth);
			trace(this.getDepth()); 
		}
	}
}
onClipEvent (mouseUp) {
	this.stopDrag();
	if(this.hitTest(_root._xmouse,_root._ymouse)){
		_root.depth+=1;
	}
}

のようにしたところ、最初にドラッグしたMC以外のMCが
一度ドラッグすると二度目は動かせなくなってしまいました。
最初にドラッグしたMCだけは深度の値が上がっていき、ドラッグできます。

traceを使い、深度の値を調べてみましたが
最初のMC以外はmouseDownが認識されてないみたいです。(押した時にtraceすらされない)

ドラッグした物が常に1番手前にあり、奥に隠れているものが
ドラッグされないようにするにはどうしたら良いのでしょうか?
助言のほう宜しくお願いします。
ひろゆき
Åê¹ÆNo.38361
投稿日時: 2008-4-8 15:22
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: loadMovieで読み込んだswfをドラッグ
もっと問題を絞られた方が良いのではないでしょうか?

これでは、loadMovie に問題があるのか、
mouseDown に問題があるのか、すぐには分かりづらいのではないかと思います。

特に、制作過程のものをそのままで、質問をされるのは、
丸投げになってしまいかねません。


----------------
質問する際は、回答者に具体的な情報を与えてください。

10-feet
Åê¹ÆNo.38363
投稿日時: 2008-4-8 15:42
新米
居住地:
投稿: 25
使用環境:
WinXp,Flash CS3 Pro,AS2.0
player8
Re: loadMovieで読み込んだswfをドラッグ
指摘ありがとうございます。
引用:

ひろゆきさんは書きました:
もっと問題を絞られた方が良いのではないでしょうか?


そうですね、ちょっと漠然としてました。
今最も知りたいのは
最初の質問に書いてるように、
MCがドラッグされる度に深度をプラスしていくように変更して

なぜ最初にドラッグしたMC以外のMCは1度ドラッグすると2度目からドラッグしないのか?

です。
これの理由がわかれば自然と直し方もわかってくるような気がします。
変更した場所が深度の部分だけなので、直す場所はわかっているのですが…。

ひろゆきさんの指摘と見当違いの返信だったら申し訳ないです。
野中文雄
Åê¹ÆNo.38364
投稿日時: 2008-4-8 16:12
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: loadMovieで読み込んだswfをドラッグ
「知りたい」ことを絞るのはもちろんとして、スクリプトの方も問題を単純化すべきです。

まず、「loadMovieを使って他のswfファイルをdamyに読み込ませる」ことは、おそらく高い可能性で問題に関係がありません。その処理は一旦省いて、シンボル内には丸か矩形を描いておきます。つぎに、「繰り返し再生」も、テストにノイズ(余計な要素)を含む恐れがありますので、1フレームにまとめます。さらに、インスタンスの数は、ふたつあれば足りるでしょう。→F-site「トラブルの『捜査手順』

そして、「最初のMC以外はmouseDownが認識されてない」ということは、おそらくないと考えます。もしそのような現象が本当に発生しているなら、問題を再現する最小限のテスト用サンプルをご提示ください。これまでに経験したことがない重大な問題です。

mouseDownイベントの発生が確認できたなら、以下のtrace()関数の[出力]を調べて、具体的に行われている処理結果をよくご確認ください。深度の変更は、(見た目の重ね順は別として、)課題とされている「ドラッグ」の操作について関係のないことが理解できると思います。

ちなみに、なぜ「ドラッグ」の操作にon()ハンドラでなく、onClipEvent()ハンドラとMovieClip.hitTest()メソッドを使われているのでしょうか。
引用:
10-feetさんは書きました:
これでドラッグして移動はできたのですが
MCが重なった時に、隠れているMCが優先されて移動対象になってしまいます。
...[中略]...
onClipEvent (load) {
}
onClipEvent (mouseDown) {
	if (this.hitTest(_root._xmouse, _root._ymouse)) {
		this.startDrag();
		this.swapDepths(0);
	}
	trace([this, this.getDepth()]);
}
onClipEvent (mouseUp) {
	this.stopDrag();
}

...[中略]...
traceを使い、深度の値を調べてみましたが
最初のMC以外はmouseDownが認識されてないみたいです。(押した時にtraceすらされない)


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

10-feet
Åê¹ÆNo.38365
投稿日時: 2008-4-8 16:54
新米
居住地:
投稿: 25
使用環境:
WinXp,Flash CS3 Pro,AS2.0
player8
Re: loadMovieで読み込んだswfをドラッグ
野中さん、ご指導ありがとうございます。

ご指摘通り、ドラッグを検証する為の単純化されたスプリクトを作ってみました。
mouseDownはキチンと動いておりました。書く場所が間違っていたようです。申し訳ありません。
(メインのスプリクトでも書き換えたら認識してました)

単純化したスプリクトの方で、深度を0と1に分けて確認した結果、
重なっていても深度0の方が移動してました。
ドラッグに関しては深度は関係ないんですね…

ますます謎が深まりました(笑)
まずは表示上、上にあるMCがドラッグ出来るような単純なスプリクトを組んでみます。

引用:

野中文雄さんは書きました:
ちなみに、なぜ「ドラッグ」の操作にon()ハンドラでなく、onClipEvent()ハンドラとMovieClip.hitTest()メソッドを使われているのでしょうか。

これは、読み込まれているswfファイルにはボタンが複数ついていて、on()ハンドラだとそのボタンが押せなかった為です。
Tonpoo (gaienboy改め)
Åê¹ÆNo.38366
投稿日時: 2008-4-8 17:02
職人
居住地: 東京・神宮前
投稿: 717
使用環境:
Windows 7 Professional,
Flash CS5 Pro,
Flash Player 10,1,102,64
Re: loadMovieで読み込んだswfをドラッグ
gaienboyです。本題と関係のない細かいことで恐縮ですが・・・
引用:
10-feetさんは書きました:
ご指摘通り、ドラッグを検証する為の単純化されたスプリクトを作ってみました。

「スクト」ではなく、「スプト」です。
(揚げ足取りのように思われるかもしれませんが、スペルミス(記述ミス)はスクリプトの
動作不具合の大きな原因の一つでもありますし、フォーラムやGoogleなどで検索をする際にも
適切な情報にたどり着けなくなってしまうことにもなりますので、注意しましょう)


----------------
Tonpoo (a.k.a. gaienboy)
Tonpoo.com / TONPOOBLOG / twitter@tonpootwit

10-feet
Åê¹ÆNo.38367
投稿日時: 2008-4-8 17:11
新米
居住地:
投稿: 25
使用環境:
WinXp,Flash CS3 Pro,AS2.0
player8
Re: loadMovieで読み込んだswfをドラッグ
引用:

gaienboyさんは書きました:
gaienboyです。本題と関係のない細かいことで恐縮ですが・・・
「スクト」ではなく、「スプト」です。
(揚げ足取りのように思われるかもしれませんが、スペルミス(記述ミス)はスクリプトの
動作不具合の大きな原因の一つでもありますし、フォーラムやGoogleなどで検索をする際にも
適切な情報にたどり着けなくなってしまうことにもなりますので、注意しましょう)


うあ、恥ずかしい
わざわざありがとうございます。
言われなければずっとスプリクトだったかもしれません…。
スクリプトですね、わかりました。

それと先ほど書き忘れたのですが
on()ハンドラでも実験したのですが、そのときは自分が思い描く動作が実現されてました。
しかしon()ハンドラだと呼び出したswfのボタンが押せない…という
あっちを立てればこっちがたたず状態です。
野中文雄
Åê¹ÆNo.38370
投稿日時: 2008-4-8 18:19
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: loadMovieで読み込んだswfをドラッグ
ドラッグ対象インスタンスのコントロールを、メインタイムラインの関数で行ったらどうでしょう?
// MovieClip: ドラッグ対象のインスタンス
onClipEvent (mouseDown) {
	if (this.hitTest(_root._xmouse, _root._ymouse)) {
		// this.startDrag();
		// this.swapDepths(0);
		_root.xMouseDown(this);
	}
	trace([this, this.getDepth()]);
}
onClipEvent (mouseUp) {
	this.stopDrag();
}

// メインタイムライン
var mcs_array:Array = new Array();
function onMouseDown():Void {
	var target_mc:MovieClip = mcs_array[mcs_array.length-1];
	target_mc.swapDepths(0);
	target_mc.startDrag();
	trace([this, target_mc]);  // 確認用
	mcs_array = new Array();
}
function xMouseDown(_mc:MovieClip):Void {
	mcs_array[_mc.getDepth()+16384] = _mc;
}

引用:
10-feetさんは書きました:
on()ハンドラでも実験したのですが、そのときは自分が思い描く動作が実現されてました。
しかしon()ハンドラだと呼び出したswfのボタンが押せない…という
あっちを立てればこっちがたたず状態です。


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

10-feet
Åê¹ÆNo.38371
投稿日時: 2008-4-8 19:24
新米
居住地:
投稿: 25
使用環境:
WinXp,Flash CS3 Pro,AS2.0
player8
Re: loadMovieで読み込んだswfをドラッグ
引用:

野中文雄さんは書きました:
ドラッグ対象インスタンスのコントロールを、メインタイムラインの関数で行ったらどうでしょう?


「すごい」の一言です
メインタイムラインに書くのかなぁと言うところまでは自分も考えたのですが、その先がさっぱりでした。

配列の発想はありませんでした。
しかも私が見てもわかりやすい書き方で…。
とても勉強になります。

このスクリプトでドラッグ専用のflaを作り、動作確認の後
loadMovie仕様の方に組み込んだ所、予定通りの動きが出来ました。

ひろゆきさん、野中さん、gaienboyさん
ありがとうございました。

深度ももう1回勉強してみます
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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