卡牌组件与图案组合
卡牌同时承担记忆内容、交互目标和状态反馈。可维护的模型应把“是什么图案”与“处于什么状态”分开。
组件契约
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 映射的步骤。
