# API 风格&约定
# 代码规范
- MiniExtend 的所有函数都无法获得
...
末尾的nil
。 - 使用
.
访问作用域的静态函数,使用:
访问类函数。 - 未明确声明可写的成员变量,不要修改,否则可能导致错误。
- 未明确声明检查参数时,MiniExtend 不检查参数,因此请保证参数正确。
# 定义
# 脚本作用域
脚本文件所处的位置叫做脚本文件的作用域。
所处的位置和脚本文件在文件结构上的位置有关,例如有的脚本文件在地图文件夹中,而有的在 UI 界面文件夹中。
所处的位置决定了脚本在什么时候执行,以及脚本执行时的环境,这就是定义它的意义。
WARNING
不同的脚本作用域的 _G
是不同的,所以不同作用域下的脚本是隔离的,但有其它方式来让它们交流。
更多内容详见 core.lua
。
在 MiniExtend ,一般将作用域分为两类:全局作用域、UI 作用域。
# 全局作用域
全局作用域下的脚本在脚本编辑器创建。
该脚本文件位于地图文件夹中,其性质是该作用域下的文件总是在可见脚本中最先执行。
# UI 作用域
UI 作用域下的脚本在 UI 编辑器中创建。
该脚本文件位于自定义 UI 界面文件夹中,其性质是该作用域下的文件晚于全局作用域下的脚本文件执行。
UI 作用域下的脚本可以使用 ScriptSupportEvent
监听所属 UI 界面的事件,全局作用域和其它 UI 作用域无法使用 ScriptSupportEvent
。
这可能很难理解
没关系!你只需知道如何区分全局作用域和 UI 作用域即可!
除非你是 MiniExtend 代码仓库贡献者,那样的话建议你理解它!
# 游戏帧
游戏帧是游戏的基本事件单位,游戏帧从 0 开始(以下简称“帧”)。
游戏数据每帧改变一次。
从第 0 帧开始,平均每 0.05秒 会进入新的游戏帧。每个游戏帧的时长是无规律,不确定的,这可能与游戏的计算量有关。
可以近似的把 1 帧当做 0.05s ,但要知道它并不是真正的 0.05s 。记住,不要利用游戏帧来做精密的计时器,类似的功能可以用 os.clock
替代。
对于延续性事件(例如玩家挖掘方块),每一帧会触发一次事件,这也体现了游戏帧的意义。
# genv
# _GScriptFenv_
# UI 事件
自定义 UI 中才会发生的事件,原生 UI 事件包括:
UI.Show
UI.Hide
UI.Button.TouchBegin
UI.Button.Click
UI.LostFocus
对于原生 UI 事件,建议使用自定义事件代替,提升代码可读性。
# 代码示例
本文档包含了一些代码示例,让它们正确运行的前提是你已经搭建好 MiniExtend 环境,有的代码可能会有其它要求。
TIP
对于 UI 示例,在代码开头会列出一些局部变量,表示 UI 界面或元件的 ID ,不要忘记替换它们!
# 关键字
以下是 MiniExtend 关键字,避免意外地使用它们作为自己的标识符,改变脚本添加的函数的意义不会影响 MiniExtend 的使用,但有的 API 可能会使用这些函数从而导致脚本无法正常运行。
全局函数:
loadstring2
deepcopy
getTick
scheduleCall
nextTick
cancelScheduleCall
getObjectId
setObjectId
registerEvent
cancelRegisterEvent
全局表:
genv
_G2
全局作用域、类:
Env
Log
Timer
UI