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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     指定座標に減速しながら近づくMC。
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
copperroad
Åê¹ÆNo.21051
投稿日時: 2005-10-25 19:55
半人前
居住地:
投稿: 59
使用環境:
Win Xp professional,Flash CS3
IE7.0
指定座標に減速しながら近づくMC。
こんばんは。

表題のようなムービーで、以下のようなものを制作中です。
http://www.geocities.jp/dwt_22/test.html

緑のボールのスクリプトは以下です+++++++++++++++++++++++++++++++++++

on(release, releaseOutside){
this.stopDrag();
}
on(press){
this.startDrag();
}


onClipEvent(load){
Xposi = 275;
Yposi = 200;
}

onClipEvent(enterFrame){
_parent.x = this._x;
_parent.y = this._y;

this._x += (Xposi - this._x) / 10;
this._y += (Yposi - this._y) / 10;

if(Xposi == this._x && Yposi == this._y){
_parent.OK.gotoAndStop(2);
}
}

++++++++++++++++++++++++++++++++++++++++++++++
座標で_x=275,_y=200を指定し、到達すると「OK」の文字が表示されるのですが、数値が指定座標以下の中途半端な値でストップしてしまいます。フラッシュのバグでしょうか?(何回かドラッグして離すとピッタリ合うことがあります。)
座標到達で発生するようなイベントでは使いにくいのですが、なにか解決策はないでしょうか?

よろしくお願いします。
ゲスト
Åê¹ÆNo.21054
投稿日時: 2005-10-25 20:40
Re: 指定座標に減速しながら近づくMC。
こんにちは。

バグかどうかは自分に判別できませんが・・・
引用:

if(Xposi == this._x && Yposi == this._y){
 this._x = Xposi;
 this._y = Yposi;

 _parent.OK.gotoAndStop(2);
}


として、微調整してはどうですか?
ayato
Åê¹ÆNo.21056
投稿日時: 2005-10-25 21:01
新米
居住地: ディズニーランドから15分っぽい
投稿: 9
使用環境:
8 Professional,MX 2004
XP Home Edition SP2
Re: 指定座標に減速しながら近づくMC。
ドラッグしたら、途中までしか出来なかったので、ドラッグしているか判別するフラグを用意すればいいと思います。イベントについては、座標を格納する変数を用意しMath.roundメソッド(Math.floorやMath.ceilは上手くいかないかも)を使い、四捨五入してやればいいです。


onClipEvent (load) {
	//フラグを定義
	var Clickflag:Boolean = false;
}
onClipEvent (enterFrame) {
	var StX:Number = Math.round(this._x);
	var StY:Number = Math.round(this._y);
	//ダイナミックテキストに表示するためだけにあるので特に必要ない変数。
	_parent.V_StX = "X:約"+StX;
	_parent.V_StY = "Y:約"+StY;
	_parent.x = "X:"+this._x;
	_parent.y = "Y:"+this._y;
	//ドラッグしてなかったら移動
	if (Clickflag == false) {
		var Xposi = 275;
		var Yposi = 200;
		this._x += (Xposi-this._x)/10;
		this._y += (Yposi-this._y)/10;
		stopDrag();
		if (StX == 275 && StY == 200) {
			_root.gotoAndStop(2);
		}
	} else {
		this.startDrag();
	}
}
on (release, releaseOutside) {
	Clickflag = false;
}
on (press) {
	Clickflag = true;
}

こうなります
http://page.freett.com/aya0802/flash/mouseball3.html
----------------------------------------------
あやと http://page.freett.com/aya0802/
野中文雄
Åê¹ÆNo.21062
投稿日時: 2005-10-25 21:24
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 指定座標に減速しながら近づくMC。
実際、計算値は「中途半端な値」になると思います。たとえば、_x = 0、Xposi = 10として、フレームごとの値を手計算で確認してご覧になることをお勧めします。

厳密には、MovieClip._xプロパティの値は小数点以下第2位程度までで丸められるので、たまたま指定値になることもあるとは思います。しかし、その方がむしろ例外でしょう。
引用:
copperroadさんは書きました:
onClipEvent(load){
Xposi = 275;
Yposi = 200;
}

onClipEvent(enterFrame){
	// ...[中略]...
	this._x += (Xposi - this._x) / 10;
	this._y += (Yposi - this._y) / 10;

それは、いいがかりというものだと思います。
引用:
座標で_x=275,_y=200を指定し、到達すると「OK」の文字が表示されるのですが、数値が指定座標以下の中途半端な値でストップしてしまいます。フラッシュのバグでしょうか?(何回かドラッグして離すとピッタリ合うことがあります。)

具体的には、指定値±(あるいは絶対値が)0.5以内になったら、指定値を設定して、到達時の処理に移るという考え方になるでしょう。


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

ひろゆき
Åê¹ÆNo.21072
投稿日時: 2005-10-26 5:49
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 指定座標に減速しながら近づくMC。
引用:
表題のようなムービーで、以下のようなものを制作中です。
http://www.geocities.jp/dwt_22/test.html

上記の test.swf において。

ボールをドラッグする位置が x軸 よりも上に持っていく場合
 Yの値は、199.55 になります。
ボールをドラッグする位置が x軸 よりも下に持っていく場合
 Yの値は、200 になります。

ボールをドラッグする位置が y軸 よりも左に持っていく場合
 Xの値は、274.55 になります。
ボールをドラッグする位置が y軸 よりも右に持っていく場合
 Xの値は、275 になります。

したがって、OKマークが表示されるのは、
ボールを、原点(275, 200)に対して、右下に持っていた場合のみです。

それに対して、スタート時は、
ボールが、原点(275, 200)に対して、左上にあるので、
X: 274.55 Y: 199.55 となります。


x軸方向だけに移動する「サンプル」を用意しました。

#スクリプトは、2つの swf とも以下のものを用いています。
#かえる君(_root.frog) と 旗(_root.flag) の位置が逆になっているだけです。

旗がある位置が、目的地です。(_root.flag)
_root にテキストフィールド (変数名: distance) を配置。
//_root.frog
onClipEvent (load) {
	action = 1;
	startX = this._x;
	_root.distance = Math.abs(_root.flag._x - this._x);
}
on (release) {
	if (action == 1) {
		this.onEnterFrame = function() {
			this._x += (_root.flag._x - this._x)/10;
			_root.distance = Math.abs(_root.flag._x - this._x);
			if (Math.abs(_root.flag._x - this._x) < 0.5) {
				action = 0;
				this.enabled = true;
			}
		};
		action = 2;
		this.enabled = false;
	} else {
		delete this.onEnterFrame;
		action = 1;
		this._x = startX;
		_root.distance = Math.abs(_root.flag._x - this._x);
	}
}
#グレー部分は、今回の件とは直接関係ないと思います。
#目的地付近で、クリック可能にして、スタート地点にもどすためのスクリプトです。

おそらく、(_root.flag._x - this._x) の値が正か負で、
丸めの計算結果が異なると思われます。
#詳しくは、検証していません。

対応策としては、野中さんも指摘されているように、
引用:
onClipEvent(enterFrame){
_parent.x = this._x;
_parent.y = this._y;
this._x += (Xposi - this._x) / 10;
this._y += (Yposi - this._y) / 10;
if (Math.abs(Xposi - this._x) < 0.5 && Math.abs(Yposi - this._y) < 0.5) {
this._x = Xposi;
this._y = Yposi;

_parent.OK.gotoAndStop(2);
}
}
ではないかと思います。

引用:
フラッシュのバグでしょうか?(何回かドラッグして離すとピッタリ合うことがあります。)

バグの疑いを持つ前に、もう少し観察や検証をする必要があるのではないでしょうか?


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

copperroad
Åê¹ÆNo.21141
投稿日時: 2005-10-29 16:43
半人前
居住地:
投稿: 59
使用環境:
Win Xp professional,Flash CS3
IE7.0
Re: 指定座標に減速しながら近づくMC。
返信が遅くなって申し訳ないです。
みなさま、ご回答ありがとうございました!
確かに僕のいいがかりでした。スミマセン。。

また、まるめる計算というのも今回はじめて知りました。ありがとうございます!
今後よく観察&検証したいと思います。
ありがとうございました!
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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