ゲームオブジェクトの位置をグリッドにスナップするにはどうすればよいですか?


9

「落下ブロック」のゲームプレイ要素を含むゲームを作成しています。問題は、ブロックをある種のグリッドにスナップできるようにする方法がよくわからない、つまり、最も近いセルをその位置にどのように選択するかがわからないことです。

ブロックはグリッドに継続的にスナップしていません(つまり、重力の影響を受けています)。任意のヒント?

回答:


13

あなたはこのようなことをすることができます

int gridCubeWidth = 16, gridCubeHeight = 16;

cube.Position.X = Math.round(cube.Position.X / gridCubeWidth) * gridCubeWidth;
cube.Position.Y = Math.round(cube.Position.Y / gridCubeHeight) * gridCubeHeight;

これは基本的に、X位置とY位置を最も近いキューブディメンションの倍数に丸めます。次に、それを立方体の寸法でスケーリングして、均一な位置を取得します。


2
Math.roundの方が理にかなっていると思います。例えばcubeWidth /高さ= 3を想像し、その後斧= 4は3にマップする必要がありますが、x = 5が6にマップする必要があります
ニューマン

0

私の簡単な調査では、いくつかのジオメトリをグリッドにスナップしているとき:

  • ポリゴンのすべての頂点(最終位置)がグリッドの頂点と一致している限り(つまり、スナップしようとしているものがグリッドにうまく収まっている場合)、

  • ポリゴンの任意の頂点を最も近いグリッド頂点にスナップし、同じ変換を他のすべての頂点に適用できます。あなたは常に同じ結果の位置になります。

つまり、単純に頂点を選択してその座標を丸めることができます。または、1単位よりも大きい辺を持つグリッドを使用している場合は、オースティンの式を使用します。

cube.Position.XorYorZ = Math.round(cube.Position.XorYorZ / gridCubeWidth) * gridCubeWidth;


-4

Math.ceilはブロックを正しいグリッドにスナップするための適切な感覚を提供します


5
「正しい感触」とはどういう意味ですか?そして、なぜ天井関数はそれをしますか?
MichaelHouse
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.