二维坐标混淆

2D Coordinate Confusion

好的,所以我以前从未创建过游戏,我正在尝试制作一个基于 2d tile 的游戏。

所以我真的很困惑一些应该很简单的东西,坐标。

我有瓦片坐标,喜欢

{0,0,0,0,0,1}
{0,0,1,0,0,1}
{0,0,0,0,0,1}
{0,0,1,1,1,1}
{0,0,0,0,0,1}

假设这是我的世界,我正在尝试渲染它,但我无法渲染它,每个图块都需要一个宽度, 这是我感到困惑的地方,所以你可以这样做,我对编码并不陌生

twidth = 100, theight = 100;

for(y = each row) {
    for(x = each tile in each row) {
        draw rect (
            X1 = x*twidth,
            Y1 = y*theight,
            X2 = x*twidth+twidth,
            X2 = y*theight+theight
            )
    }
}

我可能错了,但是:现在字面意思是其他所有东西都需要乘以 twidth/height,如果你想要不同大小的图块会更难,至少它让我感到困惑,怎么办其他游戏处理这样的事情?我不确定我是否很好地解释了我的问题是什么,我们将不胜感激

我正在使用 opengl[legacy],我认为解决方案可能是一个以不同方式设置屏幕空间的函数,因此渲染 glVertex2d(0,1) 实际上是 100px,这会使碰撞等更容易

im using opengl[legacy] and i think the solution might be a function to setup screenspace differently, so rendering glVertex2d(0,1) is actually 100px, this would make collisions, and such, much easier

您可以通过正确设置投影矩阵在旧版 OpenGL 中实现:

glMatrixMode(GL_PROJECTION);
glOrtho(0, 16, 0, 9, -1, 1);

这会将其设置为 glVertex2d(0, 0) 映射到左下角,glVertex2d(16, 9) 映射到右上角,从而在视口中提供 16x9 的图块。为了以像素为单位固定图块的大小,我们改为计算图块的小数:

glOrtho(0, (double)viewportWidth / twidth, 0, (double)viewportHeight / theight, -1, 1);

之后你可以 'scroll' 通过 GL_MODELVIEW 矩阵转换世界。