3

我正在自学 C++ 并玩 2D 瓦片映射。

我一直在这里阅读这篇scrolling文章,它基于这个平铺教程

使用上面的教程和Pearson, Computer Graphics with OpenGL书中的一些帮助,我编写了一个小程序,它绘制了一个40x40平铺的世界和一个Sprite(也是一个平铺)。

就绘制/渲染顺序而言,地图(或世界)本身是后面的层,而 Sprite 是最前面(或顶部)的层。我假设这是一个很好的方法,因为 2 个图块比一个图块和一个自定义精灵或矩形更容易交互。那是对的吗?

我已经实现了一个Keyhandling()功能,可以让mapviewport使用keyboards arrow keys. 我有一个变量offsetx, offsety,当按下一个键时,它会增加或减少。根据我是否将变量分配给mapor sprite,我可以在屏幕上的任何方向上多一个或另一个。

两者似乎都不能很好地工作,所以我将变量分配给(地图和精灵),但精灵的值为正,地图的值为负。因此,在按键时,这允许我的 Sprite 向一个方向移动,而地图向相反方向移动。

我的问题是,精灵很快移动到足以离开窗口并且不足以将更多地图带入场景。(该窗口1/8th在任何时候只显示大约的瓷砖)。

我整天都在想,我认为解决这个问题的一种有效/有效的方法是将 固定sprite到屏幕的中心,当按下一个键时map移动......我不确定如何实现这虽然。

这会是一个好方法吗?还是预计也会移动视口或相机?

4

1 回答 1

1

当你的角色移动时,你不想移动相对于 Sprite 的所有东西。考虑一个更复杂的世界,您在地图上还有其他东西,例如其他精灵。最简单的方法是保持地图固定,并相对于地图移动每个精灵(如果它是可移动的精灵)。每当您的角色在世界上移动时,移动世界上的所有东西都没有多大意义。

如果您想以始终以角色为中心来渲染您的世界,那很好。最好的办法是移动相机。这还允许您放大/缩小相机、旋转相机等,轻松跟踪世界上的所有物体。

小心使用“视口”这个词。这在 OpenGL 中意味着非常具体的事情。(即看函数glViewport)。如果您的书以不同的方式使用它,那很好。我只是指出这一点,因为我不是 100% 清楚你的意思。

于 2013-03-28T05:58:43.013 回答