因此,我在技术上使用3D,但在2D顶视图体素游戏中显示。 我已经为世界及其图块做了一个有效的展示,但是后来我添加了实体。他们应该这样工作,以便将它们分配给特定的块以优化显示。它们肯定已正确分配,但问题仍然存在。算法选择的块要么随其相邻的块摆动而变化,要么被完全错误地选择。
我在嵌套循环中运行显示-这样它就可以使播放器看到所有东西。 (rangeX以像素为单位,view [3]以像素/像素为单位)
double ama = viewing.chunksize;
for (int x = (int)-ama; x <= ama + rangeX / view[3]; x += (int)ama)
{
for (int y = (int)-ama; y <= ama + rangeY / view[3]; y += (int)ama)
{
首先,我选择一个3D矢量(我减去Y位置,因为它是从左上角而不是左下角渲染的)
Vector where = new Vector((x + view[0]), (y - view[1]), viewing.size[2] * 0.96); // in tiles
然后我将向量下限到最近的块
where = Vector.RoundAbout(viewing, where); // this method works flawlessly, proven by the tile display being correct
where = new Vector(Math.Floor(where[0] / ama) * ama, Math.Floor(where[1] / ama) * ama, where[2]); // round to 16's
然后它根据图块选择块-这是我遇到问题的地方。我已经用鼠标的位置以及鼠标在什么位置进行了测试,但这与选择的鼠标完全不同。 ChunkAt方法可以正常运行,但不能正常运行。 (点类与向量类相同,但只包含整数)
CelestialBody.Chunk at = viewing.ChunkAt((Point)where);
我绝对不知道是什么原因引起了摇晃,我一直试图解决这一问题,但是一天都没有成功。除去地板只会造成更多的情况。