好的,所以我以前从未创建过游戏,我正在尝试制作基于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
)
}
}
对此我可能是错的,但是:现在,实际上其他所有内容都需要乘以宽度/高度,如果您想要不同大小的图块,这将变得更加困难,至少让我感到困惑,其他游戏如何处理事情像这样?我不确定我能否很好地解释我的问题是什么,任何帮助将不胜感激
im使用opengl [legacy],我认为该解决方案可能是一种以不同方式设置屏幕空间的功能,因此渲染 glVertex2d(0,1)实际上是100px,这会使碰撞发生,并且这样容易得多
答案 0 :(得分:0)
我使用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
矩阵对其进行平移来“滚动”整个世界。