关于地图活动镜头
相关插件
基于核心:
◆Drill_CoreOfBallistics 数学模型 - 弹道核心
◆Drill_CoreOfInput 系统 - 输入设备核心
插件本体:
◆Drill_LayerCamera 地图 - 活动地图镜头
大部分镜头的控制方法,插件信息和插件示例 里面都有说明。
名词索引
以下你可以按住ctrl键点击下面的词,可以直接定位到想了解的名词:
地图活动镜头 | 地图镜头 图层与镜头 镜头架 |
镜头模式 | 自动模式 观光模式 固定看向 |
叠加变化 | 旋转 缩放 翻转 |
高级功能 | 镜头墙 镜头墙摆放说明 视野触发 |
插件关系
地图镜头的插件关系如下。镜头与其他插件都可以断开,属于被扩展关系。
(地图相关插件需要主动适配 活动镜头 ,由于数量很多,这里只列举部分)
地图活动镜头
定义
1)地图镜头
地图镜头: 指只作用于地图界面的镜头,你能对镜头进行各项操作。
镜头的最底层可控制 平移、缩放、旋转 这三个属性。
随着功能的不同,被划分成了镜头架、镜头模式、叠加变化等各项功能。
2)基本功能
你可以控制 开启/关闭/暂停/继续 镜头。
3)示例位置
示例中的 地图管理层 有镜头的相关属性介绍。
也对应连接到体积管理层、地图UI管理层。
图层与镜头
1)debug功能
在插件中,勾选debug参数即可开启测试内容。
开启debug功能后,可以看到 白、橙、黄、红、蓝 五种线圈,用于对齐位置。
白:地图界面的下层贴图。
橙:地图界面的中层贴图。
黄:地图界面的上层贴图。
红:地图界面的图片层贴图。
蓝:地图界面的最顶层贴图。
白矩形 表示镜头架的初始位置;
五矩形 表示静止的五个方块,发生变换时一定会错位。(比对用)
四个边角 用于对齐镜头的 平移、缩放、旋转 情况;
圆圈 用于对齐鼠标落在镜头外图层的位置;
十字 用于对齐鼠标的真实位置;
如果某一层颜色的贴图在你的游戏中发生了不合理的偏移,可以及时告诉作者我。
(对齐是个大问题,作者我反复修改调整镜头插件,整理了大量数学变换公式,终于能在大部分情况下对齐了。)
2)镜头控制的图层
在地图界面中,镜头控制 地图远景至上层 之间的所有图层。
镜头架
1)非循环地图 的镜头架
地图大小 就是 镜头架的大小。
在一般的地图中,镜头只能在限定的地图图块内进行移动。
如果地图比镜头还小,那么将会看见黑边:
2)循环地图 的镜头架
循环地图中,镜头架的边缘是开放的。
超过了镜头架的顶部,镜头将会从底部出来。(蓝色部分为循环的地图)
镜头模式
镜头模式: 即镜头移动的模式,分为自动模式和观光模式两种。
自动模式
1)定义
自动模式: 即 镜头始终移动并聚焦于玩家 的镜头模式。
玩家移动到哪,镜头跟随到哪。
自动模式下,可以切换匀速移动、弹性移动。
(下图的白框为镜头初始位置)
2)聪明的镜头
聪明的镜头:若地图为循环结构,则镜头会选择循环中与目标的最短距离,来进行移动。
聪明的镜头会选择最短路径移动,但当 镜头墙 挡住镜头时,聪明的镜头可能会反方向移动,通过循环到达镜头墙的另一面,而不是直接穿过镜头墙。见:镜头墙摆放说明 。 |
3)聚焦偏移
聚焦偏移是指在 自动模式下,镜头看向玩家的中心点,额外偏移的位置量。
此功能与 固定看向 有点相似,
如果你想要看向某个事件,而不是从玩家的中心点进行聚焦偏移,那么使用固定看向指令即可。
观光模式
1)定义
观光模式: 即通过 鼠标或键盘 自由移动镜头的镜头模式。
将 鼠标接触窗体边缘 或者 键盘上下左右控制 移动镜头。
(键盘移动玩家 与 键盘移动镜头 功能相互排斥,配置时注意只开一个)
此模式类似于RTS即时战略类游戏的镜头操控。
2)控制台插件
地图界面中,附带了 控制台 插件:
Drill_LayerCameraConsole 地图UI - 活动地图镜头控制台
插件能够实现 鼠标移动镜头时 的箭头贴图效果。
3)定位按钮
点击左上角的头像按钮,能够将镜头瞬间定位回玩家自己。
此按钮可以通过地图按钮插件制作出来:
Drill_GaugeButton 鼠标 - 地图按钮集
固定看向
1)定义
固定看向: 即使得镜头 固定看向 某个位置或物体。
如果当前为自动模式,可以使得镜头移动聚焦于目标位置或物体。
如果当前为观光模式,可以使得镜头看向目标位置或物体,鼠标键盘无法移动。
2)看向指令
你可以设置 看向指定图块 或 看向事件。
固定看向设置后,镜头模式的指令操作都会被暂停,必须解除看向才能恢复。 |
位置越界设置: 插件指令可以越界设置比如位置(0,-60)或超出高度的位置(0,200)。
但如果地图是循环的,那么镜头会永远无法到达越界的目标位置,而不停地移动。
因为经过了一次循环,若高度为60,那么镜头的坐标会从 -1瞬间变成 59,反之亦然。
3)瞬间看向设置
镜头跟随玩家或看向某位置时,移动的时间与镜头移动速度有关。
如果镜头速度过慢,你可以设置”瞬间看向”。
把镜头强制拉到目标位置。
问题 - 1像素的偏移
1) 偏移原理
默认镜头移动是1至n像素 整数像素的形式进行移动。
地图弹性移动时,图块、背景和事件的移动值经常存在0.333、0.191之类的像素移动;
由于电脑只能对整数像素进行渲染,所以会造成图块和事件在特定的位置产生1像素的bug细节。
下图为早期版本的缝隙bug(v1.6之前的bug):
镜头经过反复修正,终于使得1像素的偏移缝隙在大部分情况下不会再出现。
2) 细节bug
但是,如果在特定情况下。
细心观察,还是能够发现偏移的小细节:
镜头静态不动时,没有任何问题,而你如果突然走动一下,所有事件会向前偏移1像素,然后迅速恢复与地图同步。(偏移不会产生早期版本的缝隙) |
这部分的细节难以修正,因为地图图块和地图背景是先渲染,而事件是后渲染,这里的1像素,是建立在渲染的先后顺序的偏差上。
叠加变化
旋转/缩放/翻转
1)旋转
镜头能通过插件指令,旋转任意角度。
旋转效果和缩放效果可以叠加使用。(v1.9以前的旧版本不能)
另外注意,镜头旋转只影响 地图远景至上层 之间的所有图层。
如果你设置的UI位于 下层、中层或上层,则UI会一起受到旋转的变化。
可见前面章节图层与镜头。
2)缩放
镜头能通过插件指令,横向(缩放X) 或纵向(缩放Y) 缩放任意比例,还可以为负数。
旋转效果和缩放效果可以叠加使用。(v1.9以前的旧版本不能)
镜头旋转只影响 地图远景至上层 之间的所有图层。
如果你设置的UI位于 下层、中层或上层,则UI会一起受到旋转的变化。
可见前面章节图层与镜头。
3)翻转
本质上翻转就是 负数 形式的缩放或旋转。
比如下图的垂直翻转的插件指令效果是一模一样的。
水平翻转就是只缩放X为-1.00的结果。
垂直翻转就是只缩放Y为-1.00的结果。
顺时针翻转是旋转为180度的结果。
逆时针翻转是旋转为-180度的结果。
4)恢复默认
插件中可以设置在切换地图时自动恢复默认。
防止在旋转、缩放状态时离开地图,把叠加变化带到下一个地图里。
整体平移
1)整体平移
整体平移: 是指镜头控制的所有图层都平移一段距离。(可见2)镜头控制的图层 )
由于 图片层和最顶层 不受控制,因此可以看到下图的错位效果,
空白的区域可以放自定义的ui结构。
由于整体平移会改变 鼠标点击、UI对齐 的中心位置,因此若你要使用此功能,最好检查一下UI/地图UI/鼠标 类型的插件是否为最新的,旧版插件可能会发生错位,详细看看:2)整体平移兼容问题 |
2)边缘遮挡层
边缘遮挡层: 是指整体平移时防止玩家看到边缘的遮挡层。
如下图白色部分就是遮挡层。
你可以通过配置关闭遮挡层,看看镜头的边缘是如何工作的。
(可以看到地图管理层的图块是根据镜头位置,实时拼接的)
边缘遮挡层还能修改颜色,用于适配空白区域的底色。
边缘图块
由于地图中不同层次的运行结构不一样,在变换镜头时,会看见一些特殊情况。
比如,在插件中,关闭 ”缩小强制刷新” 设置。
通过插件指令设置镜头缩小至0.5,
可以看到事件(红箭头)、背景(紫箭头)、图块(黄箭头)是三个分离的层次结构。
使用插件指令旋转12度时,也可以看到部分黑边,都属于正常现象。
需要注意的是,这些旋转看到的黑边、边角的事件,都不会被 视野触发 激活独立开关,必须要在标准的 矩形视野 范围内才会被激活。
兼容问题
1)缩放兼容问题
由于镜头涉及脚本很多方面,镜头插件只能提供单纯的图像缩放,无法顾及其他插件。仍然需要外部插件主动配合。
比如,鼠标的触发面积与地图镜头从原理上互不相通,但是镜头缩小后,鼠标触发面积显然也需要缩小。所以需要专门兼容镜头插件。(现鼠标触发插件已兼容缩放)
再比如,地图ui部件、鼠标辅助面板,也不会与地图一起缩放,这可能会造成比例不对的错位现象。(后期会慢慢给其它插件的缩放情况做兼容)
所以,在控制镜头缩放时,你需要考虑现有的一些功能插件,是否支持镜头缩放,会不会在缩放后错位。
2)整体平移兼容问题
由于镜头的所有子插件都要 靠自己 来处理与镜头的平移关系。
因此旧版的插件,不一定能适配镜头最新的功能,可能会出现下面的错位:
如果出现了此问题,及时更新插件即可。
高级功能
镜头墙
镜头墙: 是指一种阻止镜头单向 向上/下/左/右 移动的墙。
如果玩家越过了墙壁线,则镜头将不再受阻止。
镜头墙只在 自动模式 下有效,观光模式下镜头墙会失效。
1)单向墙
图中红色部分为镜头墙的墙面,如果玩家在左墙的左边,则会被墙阻挡,只要在左墙的右边,墙就失效。
2)双向墙
一个事件可以同时拥有左墙和右墙,玩家在事件左边,右墙失效,左墙启用。而玩家去事件右边,右墙启用,左墙失效。可以使得镜头有隔墙划分的效果。
需要注意的是,左墙右墙的实际位置都在事件的左侧边线。上墙下墙的实际位置都在事件的上侧边线。
3)宽地图中的墙
以向上的墙为例,当镜头看到了指定的墙(红色部分),那么镜头就会被事件的镜头墙顶起。因为,玩家在上墙的上边,会被墙阻挡,只要在上墙的下面,墙就失效。
4)镜头墙与缩放
如果设置了镜头墙,缩放0.5时;
镜头墙会仍然保持阻塞,挤压镜头,造成向左上方放大。
5)镜头墙摆放说明
循环地图中,镜头墙放在镜头起始区域内会失效。 |
由于镜头墙在起始区域内存在不可避免的复杂数学计算误差问题,因此摆放在下图蓝色区域内位置的镜头墙,都会失效。
举个例子:
屏幕分辨率为 816x624,除以48,可得出镜头占图块 17x13的面积。那么:
如果有横向循环,则0≤x≤17的范围内,放置左右镜头墙会失效。
如果有纵向循环,则0≤y≤13的范围内,放置上下镜头墙会失效。
以舞台管理层为例子,地图只有横向循环。
镜头墙如果放在 0≤x≤17 的位置,则会失效。
那么,怎样实现x=0的镜头墙呢?
很简单,设计完后,让地图整体向左移动1图块,这样镜头墙的位置就变成了65,而不是0了。相当于利用循环的特性,实现避免镜头墙处于0≤x≤17的情况。
循环地图中,尽量确保地图足够大,防止聪明的镜头进行意外的移动。 |
原理可见:聪明的镜头 。
聪明的镜头,在循环地图中,会选择最短路径进行移动。
如果镜头被镜头墙挡住时,玩家走的位置太远,镜头会重新考虑最短路径,可能会向反方向移动。
要解决此问题,把地图的长宽拉大即可,
这样最短路径就不会考虑走反方向的情况了。
视野触发
视野触发: 指事件进入镜头视野后,触发独立开关。
来自插件:
Drill_EventSightSwitch 物体 - 镜头视野开关
可以去看看“8.物体 > 大家族-开关.docx
”的开关结构。
可以去示例中看看 体积管理层 的”发现秘密声”事件。
或者 地图UI管理层 的 镜头视野开关 事件。