跳到主要内容

卡牌组件与图案组合

卡牌同时承担记忆内容、交互目标和状态反馈。可维护的模型应把“是什么图案”与“处于什么状态”分开。

组件契约​

StarMatch/Card
State = Hidden | Revealed | Matched | Mismatch
Artwork = Saturn | Sun | Moon | Comet | Crystal | Rocket

内部结构
BackMark:卡背标记
Label:状态说明
Artwork:负责显隐的容器
Symbol:通过实例交换选择图案

六种图案各自是独立组件,没有用一个巨大图标变体集组织。Card 只有四个状态变体,避免状态与图案笛卡尔积造成重复。

实际卡牌组件状态

图案如何分配​

教学棋盘的第 1~6 张依次是土星、太阳、月亮、彗星、晶体、火箭;第 7~12 张重复相同顺序。因此第 1 与第 7 张匹配,第 1 与第 2 张不匹配。这是固定教学布局,真实游戏需要在运行时洗牌。

cardId 应区分十二个位置上的对象,patternId 标识六种图案。比较的是两个不同 cardId 的 patternId,而不是图案组件 nodeId 或屏幕坐标。

实例交换与显隐​

实际制作中直接在可见性受控的实例上交换图案,出现卡背泄露图案的问题。把显隐移到外层 Artwork Frame 后,内部 Symbol 专心负责交换。验收所有图案的 Hidden 状态,而不是只看默认土星。

请读取 Card 的实际属性 API。
创建一个月亮实例,依次切换四个 State,保留 Artwork。
检查 Hidden 没有图案泄露,Matched 有成功说明,Mismatch 与成功可区分。
报告主组件引用与最终属性,不使用 Detach 解决覆盖问题。

尺寸变化​

Artwork 和 BackMark 相对卡牌水平居中;Label 保持左右关系。适配时缩窄卡牌后,内部图案仍应居中,文字仍可读。尺寸约束与状态外观要分别检查。

练习与检查​

新增第七种原创图案,但不增加 Card 的状态变体数量。说明新图案进入组件属性、资源表和运行时 patternId 映射的步骤。