クォータービュー視点 ~ マウスでの移動
クォータービュー視点 ~ マウスでの移動
いつもこの掲示板の質問、回答には勉強させられています。
ひとつつっかかってしまったので、質問させてください。
現在クォータービュー視点のゲームを製作しているのですが
マウスにて移動を行いたいと考えています。
ただ、どうしてもうまい具合にひし形での座標が得られず製作が進まなくなってしまいました。
解決方法などお教えいただけるとありがたいです。
ひとつつっかかってしまったので、質問させてください。
現在クォータービュー視点のゲームを製作しているのですが
マウスにて移動を行いたいと考えています。
ただ、どうしてもうまい具合にひし形での座標が得られず製作が進まなくなってしまいました。
解決方法などお教えいただけるとありがたいです。
Re:補足
単純に座標系の変換だけで済みませんか?
1. まずは,マップ座標系とスクリーン座標系の関係式を調べます。
マップ座標系を45度回転させると,
x' = x / √2 - y / √2
y' = y / √2 + x / √2
これは,マップ座標系(x,y)とスクリーン座標系(x',y')の関係の式になります。
# 単純に回転行列を分解しただけです。
2. 次に,x', y'からx, yを求める式を出します。
x = (x' + y') / √2
y = (y' - x') / √2
これは,原点を一致させた回転ですが,ずれている場合はスクリーン座標系上でずれを補正してやれば,同じ式が使えます。
2の式によって得られたものはマップ座標系上のマウスの位置になります。
ただし,式の都合上単位長さは同じとしているので,得られる値はマスが48 x 48の場合における座標になりますが,これは48で割ってやればよいので問題にはならないと思います。
1. まずは,マップ座標系とスクリーン座標系の関係式を調べます。
マップ座標系を45度回転させると,
x' = x / √2 - y / √2
y' = y / √2 + x / √2
これは,マップ座標系(x,y)とスクリーン座標系(x',y')の関係の式になります。
# 単純に回転行列を分解しただけです。
2. 次に,x', y'からx, yを求める式を出します。
x = (x' + y') / √2
y = (y' - x') / √2
これは,原点を一致させた回転ですが,ずれている場合はスクリーン座標系上でずれを補正してやれば,同じ式が使えます。
2の式によって得られたものはマップ座標系上のマウスの位置になります。
ただし,式の都合上単位長さは同じとしているので,得られる値はマスが48 x 48の場合における座標になりますが,これは48で割ってやればよいので問題にはならないと思います。
Re:補足
>手ごろな方法はなにかないでしょうか
どういう条件で移動が行われますか?
(あちこちに移動できないところがある、とか、地形があって移動コストが
それぞれ異なる、とか)
http://pinomyth.web.fc2.com/のような壁が周囲にしかない完全にグリッド状に
並んでいて、且つ移動コストも均一であるなら、非常に単純なのですが。
どういう条件で移動が行われますか?
(あちこちに移動できないところがある、とか、地形があって移動コストが
それぞれ異なる、とか)
http://pinomyth.web.fc2.com/のような壁が周囲にしかない完全にグリッド状に
並んでいて、且つ移動コストも均一であるなら、非常に単純なのですが。
Re:補足
こういうのはゲームの内容に合わせて最適なものを選ぶ必要があります。
ダイクストラで十分ならいいのですが。
最短経路求解プログラム
http://www5.airnet.ne.jp/tomy/cpro/etc16.htm
ある程度CPUにパワーがあるなら A* (A-Star)がお薦めです。
A*
http://www5f.biglobe.ne.jp/~kenmo/progr ... astar.html
あとこの本が参考になりそうです。
http://www.amazon.co.jp/dp/4873112168/
# 書くのが面倒なら、グラフ理論を扱ったライブラリを使うというのも手ですね。
ダイクストラで十分ならいいのですが。
最短経路求解プログラム
http://www5.airnet.ne.jp/tomy/cpro/etc16.htm
ある程度CPUにパワーがあるなら A* (A-Star)がお薦めです。
A*
http://www5f.biglobe.ne.jp/~kenmo/progr ... astar.html
あとこの本が参考になりそうです。
http://www.amazon.co.jp/dp/4873112168/
# 書くのが面倒なら、グラフ理論を扱ったライブラリを使うというのも手ですね。