3

私は、軸測(等角ですが、角度のあるビュー)タイルベースのゲームを開発しています。

タイルシステムは正常に機能しています。次に、入力の問題に移ります。

タイルは、その背後にあるロジック(配列)と視覚的に一致していません(整列されていない/オフセットされたひし形)。

私が「google-fu」で見つけた多くの方法の中で、入力に変換(「回転」)を適用することは、(コード量的に)実装が簡単で、パフォーマンス的にも優れているようです。

問題は、私が見つけたすべての情報源について、どの数字がどこから来ているのか、また数式がそれらに対して何をしているのかを実際に把握できないことです。

それで、「アフィン変換」の数式の説明をお願いします(これが名前の場合、よくわからないので...)


この質問に対する@Yochai_Timmerの答えは私が使いたいものですが、値がどこから来ているのか(ほとんど*)、またそれらに何が行われているのかわかりません。

[ほとんど*]:「28」はタイルの半分の幅と全高、「14」は半分の高さ、「56」は全幅です...おそらく...しかし、それは私がそれから得たほとんどすべてです、正しいかどうかにかかわらず、とにかく私はまだ立ち往生しています。


より明確な答えが得られる場合は、私自身のタイルはに80 widthよる46 heightものであり、同じ方法でそれらを適用(レンダリング)しています(タイルの右上隅がタイル1x2yの中央にある1x1yなど)。 。)

また、私が使用しているのはJavaで、APIはSlick2Dです。したがって、数式の計算に役立つ隠し関数/クラス(例:、、Math.sen()... Math.cos())、または一般的な問題を知っている場合は、それらも指摘してください。非常に役立つ可能性があります。

4

1 に答える 1

3

変換の背後にある重要なアイデアは、タイルを線形変換を受けた通常の長方形と考えることです。これを理解するために、次のような通常の正方形から始めると仮定します。

  +-----+
  |     |
  |     |
  +-----+

この正方形が与えられると、正方形の2つの辺を取るだけで、「上」と「右」が何を意味するかを定義する2つのベクトルを考えることができます。

  +-----+     ^
  |     |     |
  |     |     |
  +-----+     +----->

これらのベクトルをiとjと呼びましょう。正方形を回転させたり歪ませたりすることで、この正方形をひし形に変えることを想像できます。これを行うと、これら2つのベクトルiとjがどうなるかを考えることができます。

   /\          ^
  /  \        /
 /    \      /
 \    /      \
  \  /        \
   \/          >

iとjがどのように回転およびスケーリングされているかに注目してください。

射影の下にある点がどの正方形にあるかを決定するための数学の背後にある秘訣は、このプロセスを逆にしようとすることです。通常のiおよびjベクトルで開始し、スキュー/回転ベクトルで終了する代わりに、スキュー/回転iおよびjベクトルで開始し、変換の下で世界を素敵な正方形グリッドに変換してみます。実行する計算は、「マウスが投影の位置(x、y)にあるとすると、この変換を元に戻すと、どの座標(x'、y')になりますか?」と言います。この背後にあるすべての数学は、2つの座標空間間で変換するための標準的な線形代数です。これを行う方法の説明については、このプロセスがどのように機能するかを説明している、変換行列に関するこのWikipediaの記事を読むことを検討してください。

お役に立てれば!

于 2012-06-21T21:32:40.497 に答える