0

XNAで作成されたタイルシステムがありますが、タイルを組み合わせるのに問題があります。

つまり、タイルが1ピクセル(おそらく2ピクセル?わかりません)で区切られている場合があり、それらは完全に一致していると想定されています。それらをまとめるために私が行った計算は正しいと確信しています。何が問題を引き起こしているのかわかりません。

驚いたことに、この問題は、タイルのサイズ(double)を1000に上げると修正されます。サイズはカメラのズームにのみ関連するため、ゲームプレイにはまったく影響しませんが、これを行う必要があります。

これを引き起こしている可能性があるものについてのアイデアはありますか?

編集:実際、995のタイルサイズ未満のものには問題がありますが、それ以上のものは問題ありません。これはある種の奇妙な精度の問題です。数値が大きい場合など、二重計算の方が正確ですか?

4

3 に答える 3

1

ピクセルは整数です。タイルのサイズが2倍の場合、ピクセルを取得するには何らかの変換を行う必要があります。これは、おそらく分離を取得する場所です。

たとえば、タイルAが0から始まり、長さが9.9の場合、次のタイルをどこに配置しますか?

于 2012-08-21T22:36:13.107 に答える
0

この場合、丸めを行う場合は、数学的に「丸め」として教えられているものが返されないMath.Round(value, 0, MidpointRounding.AwayFromZero)ため、を使用します。Math.Round(value)

詳細は思い出せませんが、とのようなものが発生Math.Round(0.5) = 0Math.Round(1.5) = 2ます!

于 2012-08-22T09:29:26.103 に答える
0

タイルの配置をどのように処理しているかを見ずに診断するのは困難です。タイルの幅と高さは固定されていますか、それとも可変ですか?

サイズ32x32のタイルで構成されるレベルをレイアウトする方法は次のとおりです。

  • タイルクラスには、タイルのテクスチャとタイルのグリッド位置が含まれます。
  • タイルコレクションを繰り返し、次の場所に描画します。
    • X = gridPosition.X * textureWidth
    • Y = gridPosition.Y * textureHeight

したがって、グリッド位置(0、0)に32x32のタイルがある場合、それは(0、0)に描画されます。また、グリッド位置(0、1)に32x32のタイルがある場合、それは(0、32)に描画されます。

于 2012-08-23T13:37:22.177 に答える