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

パスワード:


パスワード紛失

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

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
Åê¹ÆNo.15689
投稿日時: 2005-3-2 14:01
lineToについて
毎々お世話になっております。

マウスをドラッグして線を描画するスクリプトを書きました。

メインタイムラインには、ステージと同じサイズのMC(インスタンス名:mcBG)と、
描画用の空のMC(インスタンス名:mcDraw)を配置しています。
また、スクリプトはメインタイムラインに記述しています。


this.mcBG.useHandCursor = false;

this.mcDraw.lineStyle( 10, 0, 100 );

this.mcBG.onPress = function()
{
	mcDraw.moveTo( mcDraw._xmouse, mcDraw._ymouse );
	
	mcDraw.onMouseMove = function()
	{
		this.lineTo( this._xmouse, this._ymouse );
	}
	
	this.onRelease = function()
	{
		delete mcDraw.onMouseMove;
		delete this.onRelease;
	}
}


問題点としましては、右クリックメニューで拡大をした状態で、
描画をしますと、線がギザギザになってしまいます。

これは何が原因なのでしょうか?
lineToには何か制限があるのでしょうか?(ある長さ以上の線でないときれいに描画されない等)

ご教授願いますm(__)m

Aikawa
Åê¹ÆNo.15720
投稿日時: 2005-3-3 17:31
新米
居住地: 埼玉県__居心地と読んでいました...。
投稿: 19
使用環境:
WinXP,FLASH MX,FLASH MX 2004
Re: lineToについて
こんにちは。

試したところ、やはりonMouseMoveだと、自分も、ざらつきが残りました。
で、onEnterFrameでやり直してみたところ、今度は線がスムーズに描かれました。

と、いう事で、記述されたスクリプトを、onEnterFrameで書き直してみてはいかがでしょうか?
マウスを上げたときonEnterFrameを切るような工夫をして…。




----------------
[color=#0066ff]aikawa[/color]

長谷川
Åê¹ÆNo.15734
投稿日時: 2005-3-3 21:55
常連
居住地: 岐阜県
投稿: 84
使用環境:
OS[Windows XP]
ブラウザ[IE]
[Flash MX]
[Dreamweaver MX]
[Fireworks MX]
[FreeHand MX]
Re: lineToについて
onEnterFrameでもざらつきは残ります。描画間隔の違いで起こってる訳じゃないみたいです。具体的には次の状況を確認しました。

1 右クリック拡大で描く時のみ起こる
2 線の太さによってざらつきに変化がある。(最細線や1pxだとざらつきは出ないと思います)
3 直線ではざらつきが出ずカーブの時に出る(lineToが直線を描くものだから?)
4 ざらつき方はドットのようにギザギザというよりは毛が生えているような感じになってました。

 どうも右クリックで拡大した時での描画はうまくいかないみたいですね。右クリックの拡大などを非表示にして、スクリプトで拡大縮小させてお絵かきさせるなどのほうがいいかも知れません。
Aikawa
Åê¹ÆNo.15741
投稿日時: 2005-3-4 0:00
新米
居住地: 埼玉県__居心地と読んでいました...。
投稿: 19
使用環境:
WinXP,FLASH MX,FLASH MX 2004
Re: lineToについて
こんばんは。

そうですか…。
自分の場合も、ある程度の太めの線で試してみたのですが…。
>> lineStyle(10,0x0066ff,100)

もしかしたら、フレームレートの違いもあるかもしれません。
とりあえず、12fpsと30fpsで試したところ、やはりレートが速いほうがざらつき感が出やすいようです。
ざらつき感は、長谷川さんが前述されたものと同じです。
(が、やはりonMouseMoveと比べるとかなり滑らかに思えます…。)

スクリプトで拡大縮小するとなると、少しやっかいですね…。
縮小はともかく、拡大はそうしたいポイントを中心にもってきたいのに、onPressが既にふさがっている状態…。
描くケースと、画面を拡大縮小してポイントに動かすケースで切り変える必要があり、という事でしょうか?
(お絵かきソフトでは当り前ですが…。)




----------------
[color=#0066ff]aikawa[/color]

うじゅ
Åê¹ÆNo.15744
投稿日時: 2005-3-4 0:34
半人前
居住地:
投稿: 31
使用環境:
WinXP
MX Pro2004, Flash8
Re: lineToについて
こんばんは。始めまして。
私も試してみました。
時間間隔ではなく描画の間隔を広げたら緩和されたような気がしました。
とりあえず線幅の半分ていどを維持するようにしてみました。

this.mcBG.useHandCursor = false;
this.mcDraw.lineStyle(10, 0, 100);
this.mcBG.onPress = function()
{
	mcDraw.px = mcDraw._xmouse;
	mcDraw.py = mcDraw._ymouse;
	mcDraw.moveTo(mcDraw.px, mcDraw.py);
	mcDraw.onMouseMove = function()
	{
		var x = this._xmouse;
		var y = this._ymouse;
		var sa = Math.abs(x-this.px) + Math.abs(y-this.py);
		if (sa > 5) {
			this.lineTo(x, y);
			this.px = x;
			this.py = y;
		}
	};
	this.onRelease = function()
	{
		delete mcDraw.onMouseMove;
		delete this.onRelease;
	};
};


----------------
UJU

ゲスト
Åê¹ÆNo.15749
投稿日時: 2005-3-4 9:40
Re: lineToについて
Aikawa様、長谷川様、うじゅ様、どうもありがとうございます。

状況については長谷川様の1?4の通りでございます。
ただ、1番についてですが、最初はスクリプトで拡大をしていまして、
その時に現象を発見致しました。
問題を絞り込んでいった結果、右クリックで拡大でも起こることを確認した次第であります。
こういった情報を掲示せず、申し訳ございません。

引用:
どうも右クリックで拡大した時での描画はうまくいかないみたいですね。右クリックの拡大などを非表示にして、スクリプトで拡大縮小させてお絵かきさせるなどのほうがいいかも知れません。


Aikawa様のonEnterFrameにて処理をさせる方法には頭が下がりました。
マウスを移動での処理はonMouseMoveと思い込んでしまっていましたので、発想の転換には驚きました。
ただ、やはりマウスのゆっくり動かした場合はギザギザが出てしまいました。
フレームレートによる(低い方が滑らか)ということなので、うじゅ様の描画間隔に通ずるものがあると感じました。

引用:
もしかしたら、フレームレートの違いもあるかもしれません。
とりあえず、12fpsと30fpsで試したところ、やはりレートが速いほうがざらつき感が出やすいようです。
ざらつき感は、長谷川さんが前述されたものと同じです。
(が、やはりonMouseMoveと比べるとかなり滑らかに思えます…。)


うじゅ様のスクリプトを試させて頂きましたところ、
滑らかに描画することが出来ました。
今回はこの方法を使わせて頂きたいと思います。
ただ、一つわからない点があるのですが、
var sa = Math.abs(x-this.px) + Math.abs(y-this.py);

は何を求めているのでしょうか?
2点間の距離だと思ったのですが、少し違うようですし。
よろしくお願いします。
野中文雄
Åê¹ÆNo.15752
投稿日時: 2005-3-4 11:23
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: lineToについて
「2点間の距離」の近似値と考えてよいと思われます。調整のための数値として用いられているので、厳密に距離を計算する必要はないということではないでしょうか。ただ、三角形の2辺の和は他の1辺より長いので、距離よりはつねに大きな値になります。


引用:
kz-wingさんは書きました:
var sa = Math.abs(x-this.px) + Math.abs(y-this.py);

は何を求めているのでしょうか?
2点間の距離だと思ったのですが、少し違うようですし。
よろしくお願いします。


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

ゲスト
Åê¹ÆNo.15754
投稿日時: 2005-3-4 11:52
Re: lineToについて
野中文雄様、ありがとうございます。

「2点間の距離」の近似値だったのですね。
勉強になりました

引用:
「2点間の距離」の近似値と考えてよいと思われます。調整のための数値として用いられているので、厳密に距離を計算する必要はないということではないでしょうか。


皆様どうもありがとうございました。
解決とさせて頂きます。
うじゅ
Åê¹ÆNo.15756
投稿日時: 2005-3-4 12:19
半人前
居住地:
投稿: 31
使用環境:
WinXP
MX Pro2004, Flash8
Re: lineToについて
野中さんの指摘どおりです。
厳密に計算しても見た目変わらないと思って、なるべく計算量をすくなく簡単な計算にしてました。
しかし、速度的に貢献してない気もするので厳密な距離を計算した方が、判りやすくていいかもしれないですね。


----------------
UJU

野中文雄
Åê¹ÆNo.15758
投稿日時: 2005-3-4 13:29
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: lineToについて
以下のスクリプトなら距離の比較と同値で、Mathクラスを使った2乗、平方根の計算をするよりは速かったと思います。
var nX = this._xmouse-this.px;
var nY = this._ymouse-this.py;
var nSa = nX*nX+nY*nY;
if (nSa>25) {

引用:
うじゅさんは書きました:
しかし、速度的に貢献してない気もするので厳密な距離を計算した方が、判りやすくていいかもしれないですね。


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

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

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