2

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

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

我有瓷砖坐标,比如

{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,这会产生碰撞,等等,更容易

4

1 回答 1

1

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

您可以通过正确设置投影矩阵在旧版 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);

之后,您可以通过GL_MODELVIEW矩阵平移来“滚动”世界。

于 2019-05-05T05:19:47.310 回答