| GAMEMASTERです。
> 答えて頂いた上に申し訳ないのですが、 > 選択したマップ座標からウィンドウ座標を求める方法では、全く逆です。 > > 要するに自分が求めたい事は、マップコマンドなりでクリック監視待機を作り、 > そこで左クリックされたマップ座標、即ち、 > その座標にユニットがあれば、X(),Y()で返ってくる座標です。 > (ユニットのあるなしに関係なくです) > > しかしマウスの座標として返って来るのはあくまでウィンドウ座標で、 > そしてCenterがどこにあろうが、ウィンドウ座標でしかありません。 > > >WX(1)及びWY(1)はそれぞれ〜 > つまり、このWX(1),WY(1)の"1"が求められないのです。 > ウィンドウ左上端のマップ座標が(2,2)だった場合、 > ウィンドウ中央をクリックでマップ座標(9,9)を返したいのです。 > 言い換えれば、マップ座標の(0,0)(*32)とウィンドウ座標の(0,0)との差を求めたいのです。
マップ座標の範囲は1〜15・表示座標の範囲は0〜479で、表示座標が32変化するごとにマップ座標は1変化するため、MouseX及びMouseYを用いて選択した座標をマップ座標に換算する式は以下の通りになります。
選択X座標(仮) = MouseX \ 32 + 1 ……(1) 選択Y座標(仮) = MouseY \ 32 + 1 ……(2)
但し、ここで得られる座標はマップの中央が(8,8)であるという仮定の下での値です。 一方、表示されているマップの中央が(8,8)から1ずつ変化するごとにマップ座標(1,1)の表示座標、即ちWX(1)及びWY(1)の値は32ずつ変化します。 このことはWX(1)及びWY(1)を用いて、以下の式で表すことが出来ます。
中央X座標 = 8 - WX(1) \ 32 ……(3) 中央Y座標 = 8 - WY(1) \ 32 ……(4)
(1)(2)で得られた座標を正しい座標に変換するには、(3)(4)を用いてマップ中央の座標が(8,8)からいくら変化しているかを算出し、それを(1)(2)に加える必要があります。 中央の座標のずれは(3)(4)と8の差を求め、
X座標ずれ = 中央X座標 - 8 = - WX(1) \ 32 ……(5) Y座標ずれ = 中央Y座標 - 8 = - WY(1) \ 32 ……(6)
となります。(5)(6)をそれぞれ(1)(2)に加え、
選択X座標 = 選択X座標(仮) + X座標ずれ = MouseX \ 32 + 1 - WX(1) \ 32 = (MouseX - WX(1)) \ 32 + 1 ……(7)
選択Y座標 = 選択Y座標(仮) + Y座標ずれ = MouseY \ 32 + 1 - WY(1) \ 32 = (MouseY - WY(1)) \ 32 + 1 ……(8)
よって、任意のクリックした座標を取得する式は(7)(8)となります。
参考になれば幸いです。
もう時間がないようでございますね。では、これにて退散させてもらいましょう。
|