我试图将我的游戏世界划分为扇区/图块。并根据玩家/对象位置识别玩家/对象所在的磁贴。 我没有有限的世界大小,所以世界可以是任何大小。磁贴大小已定义且恒定。因此,整个世界被划分为给定维度的方形瓷砖。
示例:如果我将我的世界划分为大小相等的方形瓷砖,例如 300x300。
- 如果玩家在位置 (0,0( 到 (300,300( 内,则图块编号应为 (0,0(
- 如果玩家在位置 (0,0( 到 (300,-300( 内,则图块编号应为 (0,-1(
- 如果玩家在位置 (-300,0( 到 (-600,300( 内,则图块编号应为 (-2,-0(
更多示例输入和输出:
- 玩家位置为(10,10
(,图块编号应为(0,0(
玩家位置为 (-10,10(,图块编号应为 (-1,0(
玩家位置为 (10,-10(,图块编号应为 (0,-1(
玩家位置为 (-10,-10(,图块编号应为 (-1,-1(
玩家位置为(1,1(,图块编号应为(0,0(
玩家位置为 (1,-1(,磁贴编号应为 (0,-1(
玩家位置为 (-1,1(,图块编号应为 (-1,0(
玩家位置为 (-1,-1(,图块编号应为 (-1,-1(
玩家位置为 (-450,100(,图块编号应为 (-2,0(
玩家位置为(450,100(,牌号应为(1,0(
玩家位置为(-450,-100(,图块数应为(-2,-1(
玩家位置为(450,-100(,牌号应为(1,-1(
我有下面的代码,它似乎只有在 X/Z 为正时才能正常工作。一旦它处于 X/Z 的负侧,我不确定如何计算头寸。
public static Sector GetCurrentSector(Vector3 p_position)
{
int x = Mathf.FloorToInt(p_position.x / cellSize);
int z = Mathf.FloorToInt(p_position.z / cellSize);
return new Sector(x, z);
}
我检查了以下问题,这些问题似乎与我的问题有关:
- 将 2D 数组划分为框 - 具有与我的完全相同的缺陷
- 获取 2D 地图图块的矩形坐标 - 与我的问题完全相同
- 如何使用划分为图块的平面对象创建 3D 图块地图? - 似乎不是同一个问题
- 将2d游戏世界坐标转换为屏幕位置-似乎不是相同的问题
- 从世界坐标转换为切片位置 - 似乎是一个不同的问题
注意:我也不确定这个问题叫什么!所以,这让我很难搜索。我的搜索将我带到了与圆、半径、圆内点等相关的多个地方,
我建议您使用 int 而不是 FloorToInt 并使用整数除法:
public static Sector GetCurrentSector(Vector3 p_position)
{
int x = (int)p_position.x / (int)cellSize;
int z = (int)p_position.z / (int)cellSize;
return new Sector(x, z);
}
我的答案不正确,您的方法正确使用MATF。FloorInt 比负数的整数除法更好。