MicroCity内置的LUA函数
![huuhghhgyg avatar](https://www.zhhuu.top/img/favicon.jpg)
- huuhghhgyg
- 2 min read
![](https://www.zhhuu.top/img/MicroCityWorldGrid_hueeb30e2fa18f4d0617e0e9462be0f772_91378_750x0_resize_q75_h2_box_2.webp)
物流信息管理课程MicroCity学习笔记
Lua的小特性:集合
虽然Lua里面把它自己的数组称作table
,但是我认为这个数据结构更类似于Python的集合或者json,里面可以存储任何东西,不受结构约束。
1collection = {{"a", 1, 2}, "abc", {2, 3}}
如果需要查询数组的长度,只需要在数组名前面添加#
即可得到
1list = {1, 2, 3, 4, 5}
2for i=1,#list do
3 print(list[i])
4end
Lua的数组(集合)下标从1
开始,不同于C类语言的0
MicroCity的内置函数
为什么要写这个?因为MicroCity自带的编辑器相比较于“现代”的编辑器来说还是不够好用(如VSCode等)。我已经遇到了很多同学自己无法解决,找我排除代码中存在的问题。而这些问题98%都是由于语法问题,如缺少关键字(如end
、then
等)。但是我用VSCode,Lua插件一般都会直接给我自动补全。就算有什么问题也会高亮,或者使用快捷键格式化代码的时候也能看出问题。
我认为,相比于更加现代的编辑器,MicroCity自带的编辑器“ScriptEditor”由于语法问题的标示不明显、格式化代码功能缺失等使用便利性上的问题,特别是对于Lua语言不熟练的新手,造成代码编写的错误率更高。
说明:也许其中提到的功能存在于内在编辑器中,但是我反正是没有找到。
对于我个人来说,VSCode的操作快捷键和各种特性我已经很熟悉,所以我也更倾向于使用VSCode编写Lua语言的脚本。但是对于使用VSCode编写适用于MicroCity运行的Lua脚本(.mcs
)而言,由于MicroCity内置了一些函数,无法在VSCode上高亮显示,因此需要特别整理出来方便日后使用。
常用函数
这里的函数不是全集,只是我用了多少就写多少😂 全部图形函数及使用方法参见 MicroCity文档(英文) 4.3 Shapes And Tables
在本页中浏览可以使用右上角的目录列表快速转到对应函数。
图形
函数 | 作用 |
---|---|
Open |
打开图形文件,并获取图形文件对象 |
Update |
刷新图形 |
Open
Open("路径")
,返回图形文件对象。
1countryObject = Open("countries.shp")
Update
Update([图形对象])
,刷新图形对象,显示最新的图形。
1Update(countryGRD)
矢量图
函数 | 作用 |
---|---|
GetRecCount |
获取图形文件中记录的图形对象个数 |
GetShape |
从图形文件对象中获取图形对象 |
GetPartCount |
获取对应图形对象分为多少个部分 |
GetPointCount |
获取对应图形对象(部分)有多少个点 |
GetPointXY |
获取图形对象指定部分、指定点编号的XY坐标 |
GetValue |
获取图形对象的属性值 |
SetValue |
设置图形对象的属性值 |
GetShapeLen |
获取图形对象的长度 |
GetDistance |
获取坐标点之间的距离 |
GetRecCount
GetRecCount([图形文件对象])
,返回图形文件中记录的图形对象个数。
1countryNum = GetRecCount(countriesObject)
GetShape
GetShape([图形文件对象], [图形对象编号])
,返回对应的图形对象。
1China = GetShape(countries, 31)
GetPartCount
GetPartCount([图形对象])
,返回对应图形对象有多少个部分。
1part_num_of_China = GetPartCount(China)
GetPointCount
GetPointCount([图形对象(部分)], [图形部分编号])
,返回此部分图形的点的总数。
1point_num = GetPointCount(China, i)
GetPointXY
GetPointXY([图形对象], [图形部分点编号], [图形部分])
,返回对应点的X坐标和Y坐标。形式为x,y
1local x,y = GetPointXY(country, pointIndex, partIndex)
GetValue
GetaValue([图形对象], "属性名")
,返回对应图形对象的属性值。
1name = GetValue(country, "NAME")
SetValue
设置图形对象的属性值。也可以是对应图形表中的值。
函数重载:
1-- 对单个图形对象进行属性设置
2SetValue([图形对象], [设置值], "属性名")
3SetValue([图形对象], [设置值1], "属性名1", [设置值2], "属性值2", ...)
4
5-- 设置图形文件对象中固定编号(index)对象的属性值(Shapes中包含有多个图形对象)
6SetValue (Shapes, [设置值], "属性名", [index])
7-- 也可以设置多个编号的同一个属性名为同一个值
8SetValue (Shapes, [设置值], "属性名", [index1], [index2], ...)
使用实例
1SetValue(shape, 0, "W") --设置图形的W(表中)属性值为0
GetShapeLen
返回图形的长度
函数重载:
1GetShapeLen([图形])
2GetShapeLen([图形1], [图形2], ...)
使用实例
1local len = GetShapeLen(route) --获取线路(line形状)的长度
GetDistance
根据坐标值返回坐标点的长度。如果输入了多个坐标点,则返回每两对点之间的距离。(x1,y1), (x2,y2), (x3,y3)
1GetDistance(x1, y1, x2, y2 [, x3, y3, ...])
栅格图
函数 | 作用 |
---|---|
ShapeToGrid |
将矢量图转化为栅格图 |
GetGridMaxXY |
返回栅格图形的最大X和Y坐标 |
GetValue |
获取栅格图指定点的值 |
SetValue |
设置栅格图指定点的值 |
ShapeToGrid
ShapeToGrid([栅格图形对象], [矢量图形对象], "表属性名称")
,将矢量图形转化为栅格图形,栅格图形中的点填充为表中属性对应值
1ShapeToGrid(countryGridObject, countryShapeObject, "Population") --矢量图形转化为栅格图形,填充值为表中的Population列对应值
GetGridMaxXY
GetGridMaxXY([栅格图形对象])
,返回栅格图形的XMax坐标和YMax坐标(最大坐标)。
1local XMax, YMax = GetGridMaxXY(gridObject)
GetValue
GetValue([栅格图形对象], x, y)
,返回栅格图指定xy坐标点上的值
1value = GetValue(gridObject, x, y)
SetValue
SetValue([栅格图形对象], [设置值], x, y)
,将栅格图形上指定xy坐标点的值更改为“设置值”。
1SetValue(gridObject, 0, x, y) --将(x,y)点的值设为0
MicroCity文档和更多学习笔记已经整合到MicroCity笔记中,并在其中提供搜索功能。