マウス座標とマスの座標&段差の判定
-
コレジャナイ感
マウス座標とマスの座標&段差の判定
初めまして
ただ今SLGを自作している最中なのですが、マウスとマスの計算式でつまずいております。
現状マウスが指している地点の座標をマスの座標に変換する計算式は何とか組めているのですが、ここに段差の概念を追加する所で困っております。
マスの形状は四角形、使用しているのはC言語にDXライブラリです。
具体的に困っているのは、段差によって高さの違いが生じる訳ですが、それによって今までの計算式では段差の断面を示しているにも関わらず、マスとして認識してしまっております。
そして肝心の段差上の四角形内をマウスで指した時はほとんどの領域が後ろのマスの座標を取得してしまっている状況です。
これでも段差が1段差しか無い状態なら何とかプレイに差し支えはないですが、段差を増やしていくとマウスが指している地点とマスの座標のズレが致命的なものとなってしまうと考え質問致しました。
このようなマス座標を取得する計算式は通常どのようになっているものなのでしょうか?
ただ今SLGを自作している最中なのですが、マウスとマスの計算式でつまずいております。
現状マウスが指している地点の座標をマスの座標に変換する計算式は何とか組めているのですが、ここに段差の概念を追加する所で困っております。
マスの形状は四角形、使用しているのはC言語にDXライブラリです。
具体的に困っているのは、段差によって高さの違いが生じる訳ですが、それによって今までの計算式では段差の断面を示しているにも関わらず、マスとして認識してしまっております。
そして肝心の段差上の四角形内をマウスで指した時はほとんどの領域が後ろのマスの座標を取得してしまっている状況です。
これでも段差が1段差しか無い状態なら何とかプレイに差し支えはないですが、段差を増やしていくとマウスが指している地点とマスの座標のズレが致命的なものとなってしまうと考え質問致しました。
このようなマス座標を取得する計算式は通常どのようになっているものなのでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: マウス座標とマスの座標&段差の判定
はじめまして。
その問題の式と画像が無いのでパースも分からないですし何とも言えないですがクリックした地点に何が描画されているかは描画ルールから逆算できませんか?
この文からだと申し訳ないですが、このぐらいしか言えません。
その問題の式と画像が無いのでパースも分からないですし何とも言えないですがクリックした地点に何が描画されているかは描画ルールから逆算できませんか?
この文からだと申し訳ないですが、このぐらいしか言えません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
コレジャナイ
Re: マウス座標とマスの座標&段差の判定
mouseの値は直前取得
変数名は諸事情で簡単なものに置き換えておきました。
現在計算式はこのようになっております。
一マスの高さは32、横幅は64です。
そして現在↓の緑色領域ではマス座標の取得は出来ているのですが
http://iup.2ch-library.com/i/i0502412-1323679589.jpg
↓の状態で赤色をマウスが差している時は何も反応せず、緑色だけ反応する計算式が上手く組めません。
http://iup.2ch-library.com/i/i0502413-1323679635.jpg
拙い絵で誠に申し訳ございませんが、これで伝わってくれれば助かります。
変数名は諸事情で簡単なものに置き換えておきました。
mouseX = mouseX-64-x_out;
mouseY = mouseY-64-y_out;
a = mouseY - mouseX/2;
b = mouseY + mouseX/2;
q = (a+16) / 32;
p = (b+16) / 32;
if(p < 0){
p -= 1;
}
if(q < 0){
q -= 1;
}
k = p;
s = q;
x = k - s;
y = k + s;
一マスの高さは32、横幅は64です。
そして現在↓の緑色領域ではマス座標の取得は出来ているのですが
http://iup.2ch-library.com/i/i0502412-1323679589.jpg
↓の状態で赤色をマウスが差している時は何も反応せず、緑色だけ反応する計算式が上手く組めません。
http://iup.2ch-library.com/i/i0502413-1323679635.jpg
拙い絵で誠に申し訳ございませんが、これで伝わってくれれば助かります。
Re: マウス座標とマスの座標&段差の判定
マウス座標(にあるピクセル)とマスの当たり判定ですね。
このような場合わたしならとっとと計算式はあきらめます。
このような場合わたしならとっとと計算式はあきらめます。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: マウス座標とマスの座標&段差の判定
私も計算式は諦めて座標分の配列を緑色の部分を数値で塗りつぶすとかで対処する方が簡単だと思います。
あるいは、MakeScreenして反応して欲しい緑色のところだけ塗りつぶした上でGetPixel()で色があるか判定するとか。
[追記]色を塗り分ければどのマスをクリックしたかの判定にも使えます。
あと最初と名前が変わってますが名前の統一をお願いします。
あるいは、MakeScreenして反応して欲しい緑色のところだけ塗りつぶした上でGetPixel()で色があるか判定するとか。
[追記]色を塗り分ければどのマスをクリックしたかの判定にも使えます。
あと最初と名前が変わってますが名前の統一をお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: マウス座標とマスの座標&段差の判定
計算式を考えてみました。
4直線の式は
以上、未検証ですが考えてみました。
- i : マス番号
- h(i) : iマスの高さ
- x(i), y(i) : iマスの中心座標
- a : マスの辺の傾き(絵から推測すると40度ぐらい)
- r : マスの対角線の長さの半分
- mx, my : マウス座標
4直線の式は
- 左上 : f1(x) = a(x - ( x(i) - r )) + y(i) + h(i)
- 右上 : f2(x) = -a(x - ( x(i) + r )) + y(i) + h(i)
- 左下 : f3(x) = -a(x - ( x(i) - r )) + y(i) + h(i)
- 右下 : f4(x) = a(x - ( x(i) + r )) + y(i) + h(i)
以上、未検証ですが考えてみました。
-
コレジャナイ
Re: マウス座標とマスの座標&段差の判定
その計算式では手前のマスが高度が高く、奥のマスが多少覆われてしまっている状況では奥のマスを正確に指すのは難しいのではないでしょうか?
友人とも相談してみたのですが、この覆われた奥のマスを正確に指す事がどうにも難しく・・・。
自分自身まだプログラムはかなり初歩の段階という事もあり、計算式では無い方法(色を塗る?)についての知識が全くありませんでした。
これについては少々調べてみる必要がありそうです。
名前はこれで統一したいと思います、失礼しました。
友人とも相談してみたのですが、この覆われた奥のマスを正確に指す事がどうにも難しく・・・。
自分自身まだプログラムはかなり初歩の段階という事もあり、計算式では無い方法(色を塗る?)についての知識が全くありませんでした。
これについては少々調べてみる必要がありそうです。
名前はこれで統一したいと思います、失礼しました。
Re: マウス座標とマスの座標&段差の判定
難しい、というのは、奥のマスが手前のマスで隠れてしまって、クリックできる面積が少なくなってしまうために、クリックするのが「難しい」ということでしょうか。コレジャナイ さんが書きました:その計算式では手前のマスが高度が高く、奥のマスが多少覆われてしまっている状況では奥のマスを正確に指すのは難しいのではないでしょうか?
だとすると、マスに高さがある時点でどの方式でやろうとも難しいと思うのですが。
それを簡単にクリックできるようにするためには、マップを回転させる機能を実装するとかしないとダメなのではないでしょうか。
-
コレジャナイ
Re: マウス座標とマスの座標&段差の判定
いや、そういう意味では無いですが
言われてみると確かに面積が少なくなるという点は後々面倒になりそうなので、そこは段差マスの配置の注意を心掛けたいと思います
言われてみると確かに面積が少なくなるという点は後々面倒になりそうなので、そこは段差マスの配置の注意を心掛けたいと思います
-
コレジャナイ
Re: マウス座標とマスの座標&段差の判定
いや、そういう意味では無いですが
言われてみると確かに面積が少なくなるという点は後々面倒になりそうなので、そこは段差マスの配置の注意を心掛けたいと思います
言われてみると確かに面積が少なくなるという点は後々面倒になりそうなので、そこは段差マスの配置の注意を心掛けたいと思います
Re: マウス座標とマスの座標&段差の判定
手前のマスに反応してほしいのに、奥のマスに反応しちゃうから難しいという意味でしたか?
だとすると、多分h(i)が大きい順にクリック判定を行なって行けばいいんじゃないかと思います。
だとすると、多分h(i)が大きい順にクリック判定を行なって行けばいいんじゃないかと思います。