状态与数据
类与对象
为角色、装备、任务和卡牌定义结构,并管理多份独立实例。
状态与数据 · 对象
同一种结构会出现多份时,使用对象
类定义共同字段和默认值,对象是进入玩家存档的具体实例。队员、装备、卡牌、任务和建筑都适合这种模型。
# 属性、表格和对象怎样选择
| 需求 | 使用 |
|---|---|
| 玩家只有一个金币值 | 属性 |
| 固定的装备配置目录 | 静态表格 |
| 玩家拥有多件各自有耐久和品质的装备 | 对象类 + 对象实例 |
| 只需要记录装备 ID 列表且没有独立状态 | 动态表格或字符串数据 |
不要为“队员 1、队员 2、队员 3”复制三套玩家属性。类字段一次定义,实例保存各自的值。
# 设计对象类
给 AI 或传统面板明确:
| 内容 | 装备示例 |
|---|---|
| 类 ID 与用途 | equipment,玩家背包中的装备实例 |
| 默认名称与描述 | 未鉴定装备、未知属性 |
| 默认属性 | 攻击、品质、耐久、已装备 |
| 可编辑字符串 | 自定义词条、来源说明 |
| 唯一身份 | 每个实例由运行时对象 ID 区分 |
| 创建入口 | 掉落结算或商店购买脚本 |
| 删除入口 | 分解、消耗或明确的销毁规则 |
对象名称不是唯一身份。重命名后 ID 不变;脚本需要稳定定位时使用 getID()。
# 通过脚本管理实例
const equipment = objects.newObject("装备", "铁剑", "一把普通铁剑");
if (!equipment) return;
equipment.setPro("攻击", 6);
equipment.setPro("品质", 1);
equipment.setPro("耐久", 100);
查询和删除:
const all = objects.getObjects("装备");
const broken = all.filter((item) => item.getPro("耐久") <= 0);
for (const item of broken) {
objects.delObjectByID("装备", item.getID());
}
按数组序号删除容易受排序变化影响;有真实对象 ID 时优先 delObjectByID。
# 对象事务要保持原子性
创建、扣费和发放通常属于一次操作:
- 检查玩家资源和对象数量限制。
- 先确定能否创建目标实例。
- 创建并初始化全部必要字段。
- 成功后再扣除资源或记录结果。
- 任一步失败都不能留下半初始化对象或部分扣费。
快速连点和异步返回都可能重复创建,控件脚本需要提交锁或明确的幂等键。
# 传统模式字段
传统类面板还可以维护默认属性、对象可编辑动态字符串、拥有事件、销毁条件和销毁事件。自动销毁适合简单稳定规则;复杂奖励或跨系统清理更适合显式脚本,因为能清楚控制顺序和失败行为。
# 验收对象模型
- 创建两份同类对象后,它们的 ID 和实例状态独立。
- 改变一件装备不会修改其他实例或类默认值。
- 保存和刷新后对象数量、属性和字符串正确恢复。
- 删除使用真实 ID,不受当前排序影响。
- 页面空列表、单项、大列表都能显示。
- 旧存档缺少新字段时能补默认值或明确迁移。
继续阅读:对象控件与当前实例 和 objects 对象。