我有一个生成大量 2d 游戏地图图块的系统。块是 16x16 瓷砖,瓷砖是 25x25。
块有自己的坐标,例如 0,0、0,1 等。图块根据它们所在的块确定它们在世界中的坐标。我已经验证了块/图块都显示正确x/y 坐标。
我的问题是将它们转换为屏幕坐标。在上一个问题中,有人建议使用:
(worldX * tileWidth) % viewport_width
每个图块的 x/y 都经过此计算,并返回屏幕 x/y 坐标。
这适用于适合视口的图块,但它会为屏幕外的任何内容重置屏幕 x/y 位置计算。
在我的地图中,我在玩家周围的半径内加载了大块瓷砖,因此一些内部瓷砖将在屏幕外(直到它们四处移动,屏幕上的瓷砖位置才会移动)。
我尝试使用将不在屏幕上的图块进行测试:
Tile's x coord: 41
41 * 25 = 1025
Game window: 1024
1025 % 1024 = 1
这意味着图块 x(如果屏幕 0,0 位于地图 0,0,则应位于 x:1025,就在屏幕右侧)实际上位于 x:1,出现在顶部-剩下。
我想不出如何正确处理这个问题——在我看来,我需要tileX * tileWidth
确定它的“初始屏幕位置”,然后以某种方式使用偏移量来确定如何让它出现在屏幕上。但是什么抵消?
更新:当玩家移动时,我已经存储了一个 x/y 偏移值,所以我知道如何移动地图。我可以将这些值用作当前偏移量,如果有人保存游戏,我可以简单地存储这些值并重新使用它们。不需要等式,我只需要存储累积偏移量。