上海市宝山区水产西路17号 zgenren@j909.vip

公司新闻

游戏机制详解:镜头缩放时怎样保持光标下的世界点——十次变倍率时的世界锚点(实例24)

2026-10-30

放大地图时,如果只是改变倍率,光标下原本指向的位置可能被推走。把该世界点作为缩放锚点,并同时调整镜头原点,可以让观察位置留在光标下。

下面是一组独立的虚构游戏输入与逐步结果。先记录单位、编号和端点是否包含,再尝试自己推算,最后对照第一处差异。所有结论都以本例规则为前提;其他作品采用不同约定时,应按它自己的说明重新计算。

本例规则与数据

屏幕坐标等于世界坐标减镜头原点后乘缩放倍率。每次先用旧倍率和原点求出光标下的世界点,再改倍率并反求新原点;两个坐标轴独立计算,无旋转或边界夹取,精确分数不取整。

初始原点['-7', '-5'],倍率1 [[[5, 12], '2'], [[6, 11], '1/2'], [[5, 6], '1'], [[-3, 1], '1/2'], [[-6, 8], '1'], [[-9, -9], '1/2'], [[-12, -11], '3/2'], [[6, 10], '1/2'], [[-7, -4], '1/2'], [[8, -11], '3/2']]

过程记录

光标[5, 12],倍率1改为2;原点['-7', '-5']下的世界锚点['-2', '7'],调整后原点['-9/2', '1']。

光标[6, 11],倍率2改为1/2;原点['-9/2', '1']下的世界锚点['-3/2', '13/2'],调整后原点['-27/2', '-31/2']。

光标[5, 6],倍率1/2改为1;原点['-27/2', '-31/2']下的世界锚点['-7/2', '-7/2'],调整后原点['-17/2', '-19/2']。

光标[-3, 1],倍率1改为1/2;原点['-17/2', '-19/2']下的世界锚点['-23/2', '-17/2'],调整后原点['-11/2', '-21/2']。

光标[-6, 8],倍率1/2改为1;原点['-11/2', '-21/2']下的世界锚点['-35/2', '11/2'],调整后原点['-23/2', '-5/2']。

光标[-9, -9],倍率1改为1/2;原点['-23/2', '-5/2']下的世界锚点['-41/2', '-23/2'],调整后原点['-5/2', '13/2']。

光标[-12, -11],倍率1/2改为3/2;原点['-5/2', '13/2']下的世界锚点['-53/2', '-31/2'],调整后原点['-37/2', '-49/6']。

光标[6, 10],倍率3/2改为1/2;原点['-37/2', '-49/6']下的世界锚点['-29/2', '-3/2'],调整后原点['-53/2', '-43/2']。

光标[-7, -4],倍率1/2改为1/2;原点['-53/2', '-43/2']下的世界锚点['-81/2', '-59/2'],调整后原点['-53/2', '-43/2']。

光标[8, -11],倍率1/2改为3/2;原点['-53/2', '-43/2']下的世界锚点['-21/2', '-87/2'],调整后原点['-95/6', '-217/6']。

最后倍率3/2,镜头原点['-95/6', '-217/6'];每次缩放保持的是本次光标所指世界点。

独立核对与实际应用

将每步得到的世界锚点代回新旧两套变换,屏幕位置都必须等于本次光标位置。还可以将原点变化写成光标坐标乘两次倍率倒数之差,独立复算。

相邻操作可以使用不同光标位置,所以镜头原点不会简单沿同一方向变化。如果镜头被限制在地图边缘,严格保持锚点可能与边界约束冲突,本例没有加入那种夹取。缩放改变的是观看范围,不改变地图实际尺寸。

测试时先保留输入和中间状态,再只改变一个条件。空状态、正好相等、重复出现和最后一步都值得单独检查。若最终结果不符,应从第一处偏差查起,而不是在末尾随意增加补偿让数字表面一致。