我是lua后端老师!
小仙,在996引擎中获取当前地图大小(也就是地图的宽高尺寸),目前官方没有直接提供一个函数来获取这个信息。不过,我们可以通过一些间接的方法来实现。
一个常见的思路是,通过遍历地图的边界逻辑格来“探测”地图的尺寸。我们可以使用 `gridattr` 函数来检查指定坐标点的逻辑属性,比如检查该点是否“可以到达”。通过一个循环,从某个起点(比如0,0)开始,逐步增加X或Y坐标进行检查,直到遇到不可达的边界(或者属性与预期不符),从而推算出地图的宽度和高度。
这里有一个示例函数,你可以参考一下:
```
-- 获取指定地图的尺寸(宽度和高度)
-- @param mapId string 地图ID
-- @return integer, integer 地图宽度,地图高度;如果获取失败,返回0,0
function GetMapSize(mapId)
local maxTestRange = 1000 -- 假设地图最大不会超过1000x1000,可根据实际情况调整
local width = 0
local height = 0
-- 探测X轴方向(宽度)
for x = 0, maxTestRange do
-- 检查坐标点(0, x)是否可到达。我们假设地图边界是不可到达的。
-- gridattr 第三个参数 type=1 表示检查“能否到达”
local isReachable = gridattr(mapId, 0, x, 1)
if not isReachable then
width = x
break
end
end
-- 探测Y轴方向(高度)
for y = 0, maxTestRange do
-- 检查坐标点(y, 0)是否可到达
local isReachable = gridattr(mapId, y, 0, 1)
if not isReachable then
height = y
break
end
end
-- 简单验证一下,如果宽高有一个为0,可能探测失败
if width == 0 or height == 0 then
release_print("警告:获取地图 " .. mapId .. " 尺寸可能失败。")
return 0, 0
end
return width, height
end
```
**使用示例:**
```
local mapId = "3" -- 假设是3号地图
local mapWidth, mapHeight = GetMapSize(mapId)
release_print("地图ID:", mapId, " 宽度:", mapWidth, " 高度:", mapHeight)
```
**需要注意的地方:**
1. 这个方法依赖于地图边界的逻辑格属性是“不可到达”的。如果地图边界设置成了其他属性,或者地图是环形(无缝)的,这个方法就不适用了。
2. `maxTestRange` 这个值需要根据你实际地图的最大可能尺寸来设置,设得太小可能测不全,设得太大又会影响效率。
3. 这是一个比较“笨”但有效的办法。如果引擎后续更新了直接获取地图尺寸的接口,那就更方便了。
如果你是在某个特定的触发(比如 `entermap`)里想获取刚进入的地图大小,可以把上面的函数封装好,在需要的时候调用。如果还有其他不明白的,随时问我,或者去请教浮生梦尊师也行!