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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     dragtargetとswapDepths
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
DEN
Åê¹ÆNo.2082
投稿日時: 2003-12-11 17:57
常連
居住地: 千葉県佐倉市
投稿: 84
使用環境:
Mac OS9.2,10.3
WinXP
FlashMX,Flash8
Player7,Player9
dragtargetとswapDepths
いつもありがとうございます。
パズルゲームを作っているのですが、
dragtargetとswapDepthsを合わせて使うと
ドラッグ成功したら次のフレーム行くというものなのですが、
ドラッグする物がバグって表示されたままになってしまいます。

ソースは

on (press) {
this.startDrag(true);
}
on (release, releaseOutside) {
this.stopDrag();
if (_droptarget == "/target") {
this._x = eval(_droptarget)._x;
this._y = eval(_droptarget)._y;
_root.depth++;
this.swapDepths(_root.depth);
_root.gotoAndPlay(_currentFrame+1);
}
}


http://www.m-t-b.jp/tteesstt.swf
にアップしました。
ドラッグドロップが成功した後に
フレーム1に戻るのですが、
ターゲット先に物が残ったままです。

swapDepthsを省くと正常に動作します。
よろしくお願いいたします。


----------------
DEN

野中文雄
Åê¹ÆNo.2083
投稿日時: 2003-12-11 18:41
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: _droptargetとswapDepths (was: dragtargetとswapDepths)
「ソース」というのは、通常.flaファイルをいいます。SWFを見ても、インスタンスの状態や現在の表示フレームは、わからないです。(^^;
引用:
SUZUDENさんは書きました:
dragtargetとswapDepthsを合わせて使うと
ドラッグ成功したら次のフレーム行くというものなのですが、
ドラッグする物がバグって表示されたままになってしまいます。

ソースは
on (press) {
	this.startDrag(true);
}
on (release, releaseOutside) {
	this.stopDrag();
	if (_droptarget == "/target") {
		this._x = eval(_droptarget)._x;
		this._y = eval(_droptarget)._y;
_root.depth++;
this.swapDepths(_root.depth);
		this.removeMovieClip();  // 【追加】
_root.gotoAndPlay(_currentFrame+1);
	}
}

http://www.m-t-b.jp/tteesstt.swf
にアップしました。


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

DEN
Åê¹ÆNo.2092
投稿日時: 2003-12-12 10:39
常連
居住地: 千葉県佐倉市
投稿: 84
使用環境:
Mac OS9.2,10.3
WinXP
FlashMX,Flash8
Player7,Player9
Re: _droptargetとswapDepths (was: dragtargetとswapDepths)
野中さんいつもありがとうございます。

this.removeMovieClip();を入れると消えるのですが、
スクリプトで生成したわけではないのになぜ消えるのでしょうか?
最初から配置してあるMCなんですが・・・。謎

http://www.m-t-b.jp/test_fla/
にFlaファイルアップしました。

消えるのですが、次のフレームに行かなくなってしまいました。
で、追記したのをはずして(前の物)いたものは、
ドラッグドロップしたのち、フレームが1にもどり、
ドロップした場所に残っています。
何回もやると複製されてるみたいです。


----------------
DEN

森 巧尚
Åê¹ÆNo.2094
投稿日時: 2003-12-12 11:29
モデレータ
居住地: 宝塚
投稿: 650
使用環境:
.5/CS4/Safari3
XP+2000//IE6
Re: _droptargetとswapDepths (was: dragtargetとswapDepths)
引用:

dragtargetとswapDepthsを合わせて使うと
ドラッグ成功したら次のフレーム行くというものなのですが、
ドラッグする物がバグって表示されたままになってしまいます。

最終的にどんな結果を得たいのかがよくわからないのですが、どうなったらいいんでしょうか?
dragtargetを使って次のフレームからplayするのはできていますよね。
swapDepthは表示の上下関係を変えるだけでドラッグするものを消すわけ
ではないのでバグっているわけではないと思いますよ。
引用:

this.removeMovieClip();を入れると消えるのですが、
スクリプトで生成したわけではないのになぜ消えるのでしょうか?

自分で「この、ムービークリップを削除して」と言っているわけですから、スクリプトで生成していなくても消えますよ(^_^)。
で、消えてくれと言ったあとで「goto」を書いていますけど、その命令にたどり着く前に自分自身がこの世から消えているのでジャンプしないんですね。
ジャンプさせてから消えるように、順序を入れ替えればいいと思います。
_root.gotoAndPlay(_currentframe + 1);
this.removeMovieClip();

でも、ここで「_currentframe」と指定しているのはルートのタイムラインではなく、ドラッグするムービークリップのタイムラインなのでおかしいですよ。
たまたま動くかもしれませんけど、ルートのタイムラインに1加えたいのなら「_root. _currentframe」と指定しないと・・・

また、swapして表示され直すのは、swapDepthで上下関係が変わったので戻ってきたときFlashがもともとのムービークリップが無くなっていると思ってもう一回生成し直しているからですね。複製されるのも同じ理由かと・・

単にドラッグした物を消したいのであれば、swapDepthをしなければ戻ってきたときドラッグする物は消えていますよ。
でも何か上下関係を変えたいのかな。それであれば、ドラッグするムービークリップの次に空白フレームを入れておいてドラッグ後にそのフレームに進めれば見掛け上消すこともできます。また、ちょっとめんどうですが消す直前にもとのdepthにswapしても消えるんじゃないかな。

だから、最終的にどんな結果が欲しいのかによりますね。


----------------
森 巧尚
http://www.ymori.com

DEN
Åê¹ÆNo.2096
投稿日時: 2003-12-12 11:43
常連
居住地: 千葉県佐倉市
投稿: 84
使用環境:
Mac OS9.2,10.3
WinXP
FlashMX,Flash8
Player7,Player9
Re: _droptargetとswapDepths (was: dragtargetとswapDepths)
森さんいつもありがとうございます。
実際に作っている物は普通のパズルゲームで
ドラッグしてターゲットに吸着して、動かないように
Check=1というようにして止めています。

再度同じところにアップしました。

http://www.m-t-b.jp/test_fla/

今アップせた物はなぜか、4個生成した物が残ってしまいます。
ランダムで・・・。

functionをつかって上手くいかなかったので無理矢理やりました。
そちらも教えていただけると幸いです。
よろしければご指導お願いいたします。


----------------
DEN

森 巧尚
Åê¹ÆNo.2097
投稿日時: 2003-12-12 12:11
モデレータ
居住地: 宝塚
投稿: 650
使用環境:
.5/CS4/Safari3
XP+2000//IE6
Re: _droptargetとswapDepths (was: dragtargetとswapDepths)
すでに、左上にある白丸のカウンターMCの中でremoveをしようとされていますよね。
あとちょっとだったのに。
この指定の方法を
for (var i = 0; i < 44; i++) {
    takoMc = eval("takoe" + "i");
    _root.takoMc.removeMovieClip();
}

以下のように変更すればいいのではないでしょうか。
for (var i = 1; i <= 44; i++) {
    takoMc = eval("_root.takoe" + i);
    takoMc.removeMovieClip();
}

それから、ムービークリップの名前はtakoe0?43ではなくtakoe1?44ですよね。
for文の中もそのように変更しておきましたが、これで試してみてください。

ゲームが完成したら「Flashおもちゃ箱」のほうで紹介してもらえるとうれしいなあ。


----------------
森 巧尚
http://www.ymori.com

DEN
Åê¹ÆNo.2099
投稿日時: 2003-12-12 12:27
常連
居住地: 千葉県佐倉市
投稿: 84
使用環境:
Mac OS9.2,10.3
WinXP
FlashMX,Flash8
Player7,Player9
Re: _droptargetとswapDepths (was: dragtargetとswapDepths)
どうもありがとうございます。
できました。
eval()を使わないで連結するときと、無くても連結できる
ものがあるのですがどう使い分けるのかよく理解していません。
教えていただけますでしょうか?

あと時間が合っていないみたいです。
フレームレートを上げたり下げたりすると
変化してるのかな?謎

functionとforを覚えるとかなり作業効率があがりますね。


----------------
DEN

野中文雄
Åê¹ÆNo.2100
投稿日時: 2003-12-12 12:39
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: _droptargetとswapDepths (was: dragtargetとswapDepths)
eval()関数は、ストリングを一気に「参照」に変換します。
ref = eval("_root.my1_mc.my2_mc");
trace(ref);  // 出力: _root.my1_mc.my2_mc

配列アクセス演算子[]の場合には、必ずターゲットを必要とし、パスをひとつひとつ解決します。
i = 1;
ref = _root["my"+i+"_mc"]["my"+(++i)+"_mc"];
trace(ref);  // 出力: _root.my1_mc.my2_mc

引用:
SUZUDENさんは書きました:
eval()を使わないで連結するときと、無くても連結できる
ものがあるのですがどう使い分けるのかよく理解していません。


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

DEN
Åê¹ÆNo.2101
投稿日時: 2003-12-12 13:22
常連
居住地: 千葉県佐倉市
投稿: 84
使用環境:
Mac OS9.2,10.3
WinXP
FlashMX,Flash8
Player7,Player9
Re: _droptargetとswapDepths (was: dragtargetとswapDepths)
すごい初歩的な事だと思うのですが、

year=aaaa;
i=50
asd=eval("years"+i);
asdd=years+i;
asddd="years"+i;
trace(asd);
trace(asdd);
trace(asddd);

asdは何も表示されず、
asddは50と返します。
asddはyear50と返します。

配列アクセス演算子のは初めて知りました。
こんな事もできるんですね。

_root.○○○+iとするときはeval()で、
ダイナミックテキストなどに送るときに
表示するときなどに
(aaaはテキストボックス)
aaa="○○○"+i;
で反映しますが、
こういうことでしょうか?

初歩ですね。すみません。苦笑


----------------
DEN

野中文雄
Åê¹ÆNo.2102
投稿日時: 2003-12-12 14:46
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: _droptargetとswapDepths (was: dragtargetとswapDepths)
MX 2004では、結果が変わりますので、注意が必要です。
引用:
SUZUDENさんは書きました:
// year=aaaa;
years=aaaa;
i=50
asd=eval("years"+i);
asdd=years+i;
asddd="years"+i;
trace(asd);  // 出力:undefined
trace(asdd);  // 出力: NaN
trace(asddd);  // 出力: years50

asdは何も表示されず、
asddは50と返します。
asddはyear50と返します。

eval()関数は、その名前の変数やインスタンスを探して、その値を「参照」します。
i = 50;
years50 = "my value";
asd = eval("years"+i);  // 出力: my value

eval()を使わない」というのは、配列演算子[]を使うという意味かと思いました。
引用:
配列アクセス演算子のは初めて知りました。
こんな事もできるんですね。


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

(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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