插件编写:基础地图操作
阅读
2020-10-18更新
最新编辑:pevernow
阅读:
更新日期:2020-10-18
最新编辑:pevernow
基本地图操作
在这一章节中,你将会学到如何在地图上进行基本操作。
地图结构
Minetest地图被分成多个图块,每个图块是一个16大小的立方体。当玩家在地图上移动时,地图块被创建、加载和卸载。地图中尚未加载的区域充满了ignore节点,这是一个不可选择的占位符节点。空旷的空间里充满了空气节点,一个你可以穿过的隐形节点。<br>
加载的地图块通常称为活动块。活动块可以被mod或玩家读写,并且有活动实体。引擎还执行地图上的操作,例如执行液体物理。<br>
地图块可以从世界数据库加载或生成。地图块将生成到地图生成限制(mapgen_limit
),默认设置为最大值31000。但是,现有的地图块可以在生成限制之外从世界数据库加载。
读取
读取节点
一旦你有了位置,你就可以从地图上看到:
local node = minetest.get_node({ x = 1, y = 3, z = 4 })
print(dump(node)) --> { name=.., param1=.., param2=.. }
如果位置是十进制,则会舍入到包含的节点。函数将始终返回包含节点信息的表:<br>
name
-节点名称,卸载区域时将忽略该名称。param1
-请参见节点定义。这通常是轻的。param2
-请参见节点定义。
值得注意的是,如果包含块处于非活动状态,则函数不会加载该块,而是返回一个name
为ignore
的表。<br>
你可以用minetest.get_node_or_nil
,它将返回nil
,而不是名为ignore
的表。但是,它仍然无法加载块。如果块实际包含ignore
,则仍可能返回ignore
。这将发生在地图生成限制(mapgen_limit
)定义的地图边缘附近。<br>
查找节点
Minetest提供了许多helper函数来加速常见的map操作。其中最常用的是查找节点。<br>
例如,假设我们想让某种植物在mese附近生长得更好;您需要搜索任何附近的mese节点,并相应地调整增长率。