我有一个生成2D游戏地图块的系统。每个块都是16x16个瓦片,每个瓦片大小为25x25。
这些块被赋予自己的坐标,例如0,0、0,1等。根据它们所在的块,确定了每个瓦片在世界中的坐标。我已经验证了所有块/瓦片都显示正确的x/y坐标。
我的问题是将这些坐标转换成屏幕坐标。在之前的问题中,有人建议使用以下公式:
(worldX * tileWidth) % viewport_width
通过此计算每个瓦片的x/y,并返回屏幕的x/y坐标。
这适用于适合视口内的瓦片,但对于任何不在屏幕上的东西,它会重置屏幕的x/y位置计算。
在我的地图中,我加载玩家周围一定半径内的瓦片块,因此一些内部瓦片将不在屏幕上(直到它们移动为止,在屏幕上的瓦片位置会发生变化)。
我尝试了一个将会不在屏幕上的瓦片的测试:
这意味着瓷砖x(如果屏幕0,0在地图0,0处,则应位于x:1025,刚好在屏幕右侧)实际上位于x:1,出现在左上角。
我无法想出如何正确处理它 - 在我看来,我需要将
更新:当玩家移动时,我已经存储了一个x/y偏移值,因此我知道如何移动地图。我可以使用这些值作为当前偏移量,并且如果有人保存游戏,我只需存储这些值并重新使用它们。不需要方程式,我只需存储累积偏移量。
这些块被赋予自己的坐标,例如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偏移值,因此我知道如何移动地图。我可以使用这些值作为当前偏移量,并且如果有人保存游戏,我只需存储这些值并重新使用它们。不需要方程式,我只需存储累积偏移量。