|
从eca转成 lua函数,目前还无法直接使用,但这个依旧最佳的熟悉API 方法之一。
示例用的 是 官方地图给的 触发器 `Init Update`中的最后一小段,更新顶部时间的。
第一件时间就是把这块代码单独复制到一个触发内
在新建触发器上面转化为 lua代码
复制到vscode ,无论是 导出前的 eca还是导出后的 lua,可读性都非常差。
下面,正文
首先,对于局部变量 进行替换 ctrl + H
把 `data['hour']` 全部换成 `_hour`
`data['hour'] = y3.init_lua_var('STRING', '', false)` 也就变成了 `local _hour = ''`
然后把 `y3.all_conditions_succeed` 换成简单的 and or 连接的bool式
```lua
if #_min == 1 then
...
local __hour = tonumber(_hour)
if __hour >= 6 and __hour <= 18 then
```
3. 对于报错函数 `y3.get_current_game_time()` 前往 script/y3/更新日志.md 查看
在 143行看到 ' * `y3.game.get_current_game_time` -> `y3.game.get_day_night_time`'
需要换成 `y3.game.get_day_night_time()` 来获取游戏时间
`y3.timer.run_looped_timer` 也在 `y3.timer` 中找到了 `loop` 函数
`y3.ui.get_lua_ui_from_py(value,"42f88624-c329-4146-9b66-1605cef4bfae")`
也在 `y3.ui` 目录中找到了 `get_ui` 函数
整理上来说,除了查看更新日志,还可以去对应的关键字目录查找,也可以全局检索代码,再就是询问其他开发者
4. 相同的变量合并
每帧都去获取全部玩家这件事情,以及这两块面板,
我选择改成 从一开始遍历每个玩家,然后为每个玩家挂帧计时器
```lua
local prs = y3.player_group.get_neutral_player_group():pick()
for i, player in pairs(prs)
do
local time = y3.ui.get_ui(player,"GameHUD.game_time"):set_visible(true)
local value = time:get_child("value"):set_visible(true)
local icon = time:get_child("icon"):set_visible(true)
y3.timer.loop(0.03,function()
local _time = y3.game.get_day_night_time()
local strMin = _time .. ":"
local bDay = (true) and 133801 or 133796
value:set_text(strMin)
icon:set_image(bDay)
end)
end
```
5. 意义
从 2035个字符 压缩到 600个字符,缩短日后读代码的时间,也就是维护更新的时间
|
|