UID19188性别保密经验 EP铁粒 粒回帖0主题精华在线时间 小时注册时间2020-11-1最后登录1970-1-1
| 本帖最后由 冥王大大 于 2025-9-8 12:58 编辑
前言 | 数据储存(data storage)其实并不是SAPI独有的概念,但是SAPI脚本又不能把数据直接储存为游戏程序的常量,而有些数据我们要求在存档中可以连续使用,那就需要了解数据储存。这里主要介绍通过SAPI在游戏储存数据的方法,至于JavaScript固有的new Map()等等这里不会着重介绍。
| 讲述 | SAPI 2.0有各种自定义属性,它们是较好的数据存储方法,另外还有标签、计分板和结构,在SAPI 1.0还有人用物品注释(lore)来储存数据。它们有各自的优缺点:- 自定义属性可以储存在世界NBT、实体NBT、物品NBT内,这其实方便我们绑定这些数据在特定的要素上。但是它不是显性的,你没有办法在游戏中直接看到有哪些自定义属性,它的值是什么,要借助.getDynamicPropertyIds()和.getDynamicProperty()才能获知
- 标签通常来讲只能储存字符串和布尔值(有标签为真,无标签为假),然而所有的字符串理论上都可以进行区域划分来储存不同的数据(只要字符串长度没有限制),比如我们设计一个字符串:"num:1bool: truestr:notspecific"可以通过.indexOf以及.slice()等等方法来读取数据(只要你的设计是合理的)
- 计分板可以通常用来在要素上绑定整数类型的数据,但既然字符串可以拆分,整数为什么不可以拆分呢?你可以设计一个名为int的计分板外加一个decimal计分板,就可以储存浮点数;这些数字也可以用来表示布尔值、枚举类型等。只不过需要注意,计分板的数字是32位数据,所以超出这个值就不适合用计分板(但是2^32也是很大的一个数了,你要存什么能比它还大呢?)。另外计分板的计分对象(participant)名称也可以算作字符串数据。而且计分板的数据侦测方式我们都很熟悉了,JSON文本和计分板屏幕显示都可以让我们直观地观察这些数据。
- 结构可以存储方块和实体,这样可存储的数据类型就比较多了,它也可以配合自定义属性和标签使用。只不过,SAPI中的结构管理器(StructureManager)类只开放了管理其中方块的方法,通过SAPI调用结构中的数据还是比较难的,大多数时候我们用它存储地形就够了。
- 物品注释可以有很多条,但是每一条的长度只能在50个字符以内,最大行数只有20行,目前来讲不适合储存数据,但是直观性还是有的,只适合作数据显示了。
- 其他还有物品名称之类的存储方法就不过多介绍,它们在指令检测中的表现远比在SAPI中的好得多。
重点是按照需求选择数据的存储方式,这里提供几个实例,帮助各位熟悉数据存储。 | 应用 | 实例1:死亡回归的鱼钩
main.js(794 Bytes, 下载次数: 38)
实例2:比大小游戏
main.js(4.02 KB, 下载次数: 32)
实例3(较复杂):控制台附加包 | 总结 | | 《Concepts of SAPI》系列主讲SAPI的基本概念,存在进阶内容的引入,但还是以基础为主,进一步的学习内容还是以官方文档优先。本篇是该系列最后一个章节,建议在学习了之前章节的知识之后再来运用本节的内容。 |
|
|
评分查看全部评分
|