我正在尝试构建一个可以在边缘环绕的矩形网格。任何玩电子游戏的人都可能熟悉这个概念:在世界地图上朝一个方向走得足够远,你最终会回到起点。但是,这会在设置视口时造成一些困难,因为边缘可以滚动到负坐标区域。
取负坐标并确定其实际值很容易:
function GetRealCoords(value: TPoint): TPoint;
begin
result := ModPoints(AddPoints(value, MAP_SIZE), MAP_SIZE);
end;
其中 AddPoints 和 ModPoints 只需将+
和mod
运算符分别应用于两个输入的每个坐标以产生输出值。
麻烦的是扭转这个操作。给定一个坐标为正的点和一个 TRect ,其中 Top 和 Left 值可以是正数或负数,(并且 Bottom 或 Right 可能超出地图的边缘),并且在全局范围内声明 MAP_SIZE,是有什么方法可以确定该点是否落在查看矩形所覆盖的区域内,而不必运行相同的计算多达四个不同的时间?