Callv 方法
这是我目前写的最爽的一次代码,完美履行了我精简(精简到有风险)的美学。所以来久违的连载了一下我的博客。
其实写的东西很多了,只是现在不像以前刚学那会,感觉没什么东西是有必要放到博客上记录的。但这次不同,这次的方法是真的爽。
我之前不是在写一款文字游戏吗,这个项目算是我真正意义上的一个作品,刚开始写的时候埋了不少坑。所以这会基础功能快完结了,我就琢磨着重构一下代码,然后就涉及到题目说的这个需求了:
解析剧本 -> 转化为JSON -> 读取值并执行相应的逻辑。
本来,按照原本的方法应该是需要将类似 "value": "set_weather_effect(true, 0, 1.0, -0.01, Color.html("#FFFFFF"))" 这样的参数挨个通过 , 拆分为单独的数据传入函数中调用的。但是我不甘心写得这么麻烦,那可是十几行代码,而且我又不只是只有这一个效果着色器,如果着色器参数不同的话,我还得写不同的解析逻辑,然后我就去翻了官方手册,找到了 call 这个调用体方法,能够将方法和全局函数作为 Callable 进行访问。
不得不说,GDScript 在功能实现上是真的方便,很多东西都已经写好内置方法了,官方手册也写得清楚,需要的时候去查就行。
话归整体,找到对应方法后,直接使用此方法来实现调用函数的逻辑即可,最简单的示例为:
# 解析后的参数数组
var method = "set_weather_effect"
var args = [true, 1, 1.0, -0.01, "FFFFFF"]
# 使用 callv 调用方法
GameSystem.effects_manage_instance.callv(method, args)如示例所示,我只需要在解析剧本时解析出类似 method 和 args 这样两个参数,就可以实现对函数的调用了。
一行代码!而且通用!
当然,上面的是示例,我实际上还需要将 [ef = weather(true, 0, 1.0, -0.01, FFFFFF] 这样的剧本格式解析为数组,然后才能调用,不过那个不是重点,就不提了。
顺带说一下,我重构了 MENU 界面,感觉现在比以前好看了不少,也就是封面那个。
版权声明:本文采用 CC BY-NC 4.0 协议授权
转载需注明作者及原文链接: https://mansifield.pages.dev/e9wgem/