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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     _droptargetを含むswfをmain.swfに読み込む
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
KEN74
Åê¹ÆNo.35815
投稿日時: 2007-10-25 18:46
新米
居住地:
投稿: 4
使用環境:
WindowsXP HOME Edition
MX Professional2004
_droptargetを含むswfをmain.swfに読み込む
初めて質問させて頂きます。
メニュー画面にあるムービクリップ
a_mcをb_mcにドラッグして重ねると親MC(menu_mc)のタイムラインが
移動しメニュー画面がフェードアウトしてゆくという
FLASHを作りたくa_mcに↓の様なscriptを書きました。


on (press) {
startDrag (_root.a_mc, false);
}

on (release) {
if (this._droptarget == "/b_mc")
{
_parent.gotoAndPlay(10);
this._x = this.b_mc._x;
this._y = this.b_mc._y;
}
stopDrag ();
}

このscriptでメニュー単体で動かす場合はちゃんと動いてくれるのですが
パブリッシュしてmain.swfの_level1へ読み込むと
a_mcとb_mcを重ねてもmenu_mcのタイムラインが移動してくれません。
メインへ読み込んだ場合b_mcのパスが変わってしまうのはなんとなく分るのですが
その場合どうパスを書き直して良いのか分りません。
どなたか教えてください。宜しくお願いします。
野中文雄
Åê¹ÆNo.35826
投稿日時: 2007-10-26 15:07
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: _droptargetを含むswfをmain.swfに読み込む
ムービーの構造が、わかりかねます。本当に、「このscriptでメニュー単体で動かす場合はちゃんと動いてくれるのです」か?
引用:
KEN74さんは書きました:
このscriptでメニュー単体で動かす場合はちゃんと動いてくれるのですが

「a_mcに↓(掲示)の様なscriptを書」いたとすれば、以下の構造が「推測」されます。

(1) a_mcとb_mcはメインタイムラインに配置されている。
(2) a_mcのシンボル内にもb_mcが存在する

だとすると、掲示のスクリプトは、つぎのような処理をしていることになります。

(3) a_mcをドラッグ&ドロップしたとき、ドロップ先ターゲットのインスタンスを調べる。
(4) ドロップ先インスタンスがメインタイムラインのb_mcだったら、a_mcの座標値をa_mcが内包するb_mcの座標値と一致させる

しかし、a_mcの内包するb_mcが独自に動き回るものでなければ、その座標値はつねに一定のはずです。また、a_mcの座標と、a_mcが内包する子のb_mcの座標とは、座標空間が異なります(座標の原点が、a_mcはメインタイムラインの左上隅で、b_mcはa_mcのシンボルの基準点になります)。

以上から、このスクリプトがどのような処理をしようとしているのかが理解できません。スクリプトに誤りがないのでしたら、ムービーの構造とスクリプトの処理内容を改めて詳しくご説明ください。→【スクリプトを見てください

なお、ご質問のトピックに回答がないのは、このようにご説明内容がわかりにくいためです。そのご説明をそのままコピーして「マルチポスト」しても、結果は変わらない可能性が少なくありません。

投稿フォームに記載されている「投稿に関して」より引用:
複数の会議室、または複数のコミュニティサイトに、同じ質問を投稿することは、マルチポストと呼ばれるマナー違反行為ですのでおやめ下さい。


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

KEN74
Åê¹ÆNo.35827
投稿日時: 2007-10-26 16:23
新米
居住地:
投稿: 4
使用環境:
WindowsXP HOME Edition
MX Professional2004
Re: _droptargetを含むswfをmain.swfに読み込む
返信ありがとうございます。
分り難い質問で申し訳ありません。
先ほど実際サーバーにアップして
IE7にて動作を確認してみたのですが
やはりメニューのみではちゃんと動いてくれました。

メニューのみ
http://www.geocities.jp/ken34reo34/FLASH/08/menu.html

「右矢印にロールオーバー」→「メニューが右にスライド」
→「左矢印にロールオーバー」→「メニューが左にスライド」
→『左矢印をドラッグ』→『右矢印の上にドロップ』
→『メニューがフェードアウトしロザリオのイメージが出てくる』

『 』の部分が今回質問させて頂いた部分なのですが
↓の様にトップページへ読み込むと動作しなくなってしまいます。

メニューを読み込んだトップページ
http://www.geocities.jp/ken34reo34/FLASH/08/top.html

スクリプトとムービーの構造を説明させて頂きますと
a_mcは左側の矢印、b_mcは右側の矢印で

on (press) {
startDrag (_root.a_mc, false);
}

//このスクリプトで左側の矢印をドラッグ

on (release) {
if (this._droptarget == "/b_mc")
{
_parent.gotoAndPlay(10);

//もしドロップした先が右側の矢印ならば親ムービークリップのタイムライン10へ移動

this._x = this.b_mc._x;
this._y = this.b_mc._y;
}
//右矢印を左矢印にドロップしたら吸着

stopDrag ();
}
//マウスを放したらドロップ


というような理解、意図を持って記述致しました。
何分独学ですので気付かぬ内に誤った理解をしているかもしれません・・・
このスクリプトに丸2日悩んでそれでも出来ず
ここまでやったらなんとか形にしたいので宜しくお願いします。

 マルチポストについては言葉自体初めて聞いたので
誤った認識をしておりました。
このサイト内のみだと思ってました。
僕の読解力不足ですみません。
野中文雄
Åê¹ÆNo.35828
投稿日時: 2007-10-26 17:29
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: _droptargetを含むswfをmain.swfに読み込む
以下の点について、ご回答がないようです。「a_mcのシンボル内」にはMovieClipインスタンスは存在しないのではありませんか?
引用:
野中文雄は書きました:
「a_mcに↓(掲示)の様なscriptを書」いたとすれば、以下の構造が「推測」されます。

(1) a_mcとb_mcはメインタイムラインに配置されている。
(2) a_mcのシンボル内にもb_mcが存在する

なぜこのような「推測」に至ったかおわかりになっていないのでしたら、「ターゲットパス」の理解が不十分だと思われます。

MovieClip._droptargetプロパティが文字列で値を返す難点は、eval()関数を用いることで回避できます。しかし、その値を正しくb_mcのパスと比較判定するには、ターゲットパスの理解は必須です。

swfの読込みは一旦脇において、ターゲットパスを正しく学習されるようお勧めします。
引用:
KEN74さんは書きました:
スクリプトとムービーの構造を説明させて頂きますと
a_mcは左側の矢印、b_mcは右側の矢印で
// ...[前略]...
on (release) {
	trace(this);
	trace(this._parent);
	trace(eval(this._droptarget));
	if (this._droptarget == "/b_mc") 
	{
		trace(this.b_mc);
		_parent.gotoAndPlay(10);

		//もしドロップした先が右側の矢印ならば
		//親ムービークリップのタイムライン10へ移動

		this._x = this.b_mc._x;
		this._y = this.b_mc._y;
	} 
	//右矢印を左矢印にドロップしたら吸着
	// ...[後略]...

というような理解、意図を持って記述致しました。

「右矢印を左矢印にドロップしたら吸着」しないと推測します。もっとも、親タイムラインの第10フレームに移動すると矢印がないため、問題が顕在化しないのでしょう。しかし、ターゲットパスの理解が不十分なままでは、ご質問の課題は解決できません。


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

KEN74
Åê¹ÆNo.35832
投稿日時: 2007-10-27 0:04
新米
居住地:
投稿: 4
使用環境:
WindowsXP HOME Edition
MX Professional2004
Re: _droptargetを含むswfをmain.swfに読み込む
僕の記述の仕方だとa_mcのシンボル内にもb_mcが存在しなければならないのですね・・・
野中様の推測通りa_mc内にb_mcは存在しません。
ターゲットパスについてはあちこち検索かけて
色んなページを参考にさせて頂いてるのですが
まだ完璧に理解できてなくて・・・
勉強しなおします。
その中でeval()関数の使い方も教えていただきありがとうございます。
ターゲットパスについて調べてる最中に目にしたのですが
使い方が分らなかったので。。。1つ絡まっていた糸が解れました。

 ちなみに野中様に書いて頂いたscriptを使わせて頂き
再度チャレンジしてみましたがやはりメニューの段階では出来ても
トップページへ読み込むと出来ませんでした。

 最後に質問させて頂きたいのですが
if (this._droptarget == "/b_mc")
この部分のターゲットパスの記述方法が
スラッシュシンタックスというのは調べて分りました。
そこでtopにb_mcの親MC mainを読み込んだ場合b_mcまでの
ターゲットパスが変わると思うのですが
その場合/top/main/b_mc で宜しいのでしょうか?
何度も質問して申し訳ありませんが宜しくお願いします。
野中文雄
Åê¹ÆNo.35835
投稿日時: 2007-10-27 0:33
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: _droptargetを含むswfをmain.swfに読み込む
まず、前の回答で申し上げたのは、「スラッシュシンタックス」は使わない方がよいということです。使ってスクリプトを完成することは可能でも、応用がしにくいスクリプティングになります。

eval()関数を用いれば、「スラッシュシンタックス」のパスを通常のターゲットパスに変換することができます。そのパスを、ifステートメントでb_mcと比較すればよいはずです。

そのとき、今のKEN74さんのスクリプトでは、a_mcのシンボル内に存在するb_mcを探してしまうことになるでしょう。ところが、「a_mc内にb_mcは存在」しない訳ですから、ifプロック内に記述したステートメントは、永久に実行されることがありません。

もう一度申し上げます。
引用:
野中文雄は書きました:
swfの読込みは一旦脇において、ターゲットパスを正しく学習されるようお勧めします。

eval()関数を用い、ターゲットパスを正しく取得したうえで、ifステートメントを処理させることができれば、外部swfとして読込んでも正しく動作すると予測します。

私の書いたスクリプトは、ターゲットパスを確認するのに役立つと思われる情報を、[出力]パネルに表示するだけのものです。処理内容は、何も変えていません。KEN74さんがターゲットパスを正しく理解して、ご自分で書直される必要があります。

なお前の回答で、「ターゲットパス」について解説したサイトのページを、リンクしてあったはずです。それは、お読みになりましたか?
引用:
KEN74さんは書きました:
ターゲットパスについてはあちこち検索かけて
色んなページを参考にさせて頂いてるのですが
まだ完璧に理解できてなくて・・・
...[中略]...
 ちなみに野中様に書いて頂いたscriptを使わせて頂き
再度チャレンジしてみましたがやはりメニューの段階では出来ても
トップページへ読み込むと出来ませんでした。


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

KEN74
Åê¹ÆNo.36355
投稿日時: 2007-11-19 19:21
新米
居住地:
投稿: 4
使用環境:
WindowsXP HOME Edition
MX Professional2004
Re: _droptargetを含むswfをmain.swfに読み込む
レスが遅くなってしまい申し訳ありません。
あれ以来自分なりにターゲットパスについて
少し勉強しまして、今日ようやく問題解決出来ました。
やはり原因はターゲットパスの指定方法が間違ってた事で

on (press) {
     startDrag(_root.a_mc, true);
}
on (release) {
trace(this);
trace(this._parent);
trace(eval(this._droptarget));
if (this._droptarget == "/b_mc")
{
trace(this.b_mc);

上記のScriptで

if (this._droptarget == "/b_mc")



if (this._droptarget == "_level1/b_mc")

とターゲットパスを変更したら動いてくれました。
まだスラッシュシンタックスを使ってしまってるので
次ぎはeval()関数を使いこなせる様頑張ろうと思います。

この度は、ややこしい質問に何度も回答いただき
本当にありがとうございました。非常に勉強になりました。
また壁にぶつかったら質問させて頂くかもしれませんが
その時はまたよろしくお願いします。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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