二七王:精灵复制范围收回,仅算奖牌型一处使用

上一次提交把复制方案扩到了建房选项、并把已出牌区列为候选,超出了
实际要求。现纠正:

- 已出牌区维持预置(28 × 3),不改复制,撤销原 T-29 候选项。
- 建房规则选项改回预置 20 个(3 类别标题 + 8 选项 × 2 + 房卡附注),
  选项集固定、数量小,不需要复制;渲染仍由 §1.1 的配置数据驱动。
- 选用判据表改为明确结论:全项目只有「算奖牌型」用复制,其余一律预置。
  精灵段有近 2000 空位,预置的 ID 开销不构成压力,不必给每处都背上
  显式清理负担。

原 T-30 顺延为 T-29。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-25 08:30:32 +08:00
co-authored by Claude Opus 5
parent 766ef7eae3
commit b85c286dde
+27 -33
View File
@@ -163,7 +163,7 @@ get_nextseat: function(seat){ return (seat + 1) % 3; }
| 1900–1949 | 大局总结算 / 解散结算 | 待设计 |
| 1950–1999 | 出牌历史面板 | 待设计 |
| 2000–2049 | 明牌面板 | 待设计 |
| 2050–2099 | 建房规则选项(**精灵复制**:容器 1 + 模板 3) | **4** |
| 2050–2099 | 建房规则选项(3 类别标题 + 8 选项 × 2 + 房卡附注) | 20 |
| 2100–2999 | **预留** | —— |
#### 图片资源(Image,≥501)
@@ -347,7 +347,7 @@ var CARD_BACK_FRAME = 55; // 牌背(二七王固定用牌背
#### 实现要点
- 交互:点击平台约定的 25 号精灵 → 拼 `roomtype` 串 → `Net.Send_create_room({agentid, playerid, gameid, roomtype})`。
- 精灵:群组 250,号段 2050–2099;挂在平台创建房间界面所在图层(T-3)。**用精灵复制生成**(见 §5.8)。
- 精灵:群组 250,号段 2050–2099,**预置 20 个**(见 §5.8);挂在平台创建房间界面所在图层(T-3)。
- 资源:选择框(4 帧)、类别标题(3 帧)。
- **整个界面由一份「类别 → 选项组 → 选项」的配置数据驱动渲染**,不为每个选项写死代码。加一个选项 = 配置里加一条,不改渲染逻辑(工程总则 §5 OCP、§6 配置优先)。
- **`roomtype` 的拼串必须只在一处实现**——与服务端 `class.config.js` `parse()` 对称的 SSOT 要求,不得在多处按下标硬拼。每个选项在配置里自带 `bit` 与 `value`,拼串就是遍历配置,无需按下标硬编码。
@@ -1085,15 +1085,17 @@ for (var i = 0; i < cards.length; i++) {
| 逐个控制 | 需要独立 z 序 / 动画 / 命名引用 | 只需批量摆位 + 设帧 |
| 清理成本 | 无 | 必须显式 `remove`,忘了就残留 |
据此,本清单的选用:
据此,本清单的选用——**全项目只有「算奖牌型」一处用复制,其余一律预置**:
| 区域 | 方式 | 理由 |
| --- | --- | --- |
| 自己手牌(36) | **预置** | 上限确定;需逐张选中上浮、独立动画与点击 |
| 暗牌(8)/ 底牌(8) | **预置** | 固定 8 张 |
| **算奖牌型** | **复制** | 张数不定、多数局用不满 |
| **建房规则选项** | **复制** | 选项由配置驱动、随游戏变(模板项目复用性),见 §5.8 |
| 已出牌区(28 × 3 = 84) | 预置(**待复议 T-29**) | 84 个精灵里绝大多数时候只用 1–4 个,是下一个适合改复制的候选;但出牌有叠压 z 序与出牌动画需求,改前需确认复制精灵能满足 |
| **算奖牌型** | **复制** | 张数不定、无小上限,多数局用不满 |
| 自己手牌(36) | 预置 | 上限确定;需逐张选中上浮、独立动画与点击 |
| 已出牌区(28 × 3) | 预置 | 需叠压 z 序与出牌动画,逐张独立控制 |
| 暗牌(8)/ 底牌(8) | 预置 | 固定 8 张 |
| 建房规则选项 | 预置 | 选项集固定(4 组 8 项),数量小 |
> 精灵段 1001–2999 有近 2000 个空位(§0.3),预置的 ID 开销不构成压力;复制只用在「数量真的不定」的地方,避免给每处都背上显式清理的负担。
### 5.7 Layer 303–306 · 其余弹窗 【待设计】
@@ -1104,33 +1106,26 @@ for (var i = 0; i < cards.length; i++) {
| 305 | 243 | 2000–2049 | 明牌面板:另两家未出主牌的具体牌面 |
| 306 | —— | —— | 解散投票【T-2:是否平台提供】 |
### 5.8 建房规则选项(群组 250,**精灵复制**)
### 5.8 建房规则选项(群组 250,2050–2099,预置)
界面由 §1.1 的配置数据驱动渲染,**类别数与选项数随配置变**(模板项目克隆到新游戏时 `roomtype` 位数不同)。因此用 `SpriteCopyUtils` 复制生成,**编辑器里只建 4 个精灵**:
**3 个类别、4 个选项组、8 个选项**(§1.1)。选项集固定,全部预置。
| 精灵 ID | 键名 | 类型 | 用途 | 资源 / 帧 |
| --- | --- | --- | --- | --- |
| 2050 | `ROOM_OPT_BOX_CONTAINER` | **容器** | 所有类别标题 / 选择框 / 文字的复制父精灵 | —— |
| 2051 | `ROOM_CAT_TITLE_TPL` | **模板** | 类别标题模板(默认隐藏) | `ROOM_CAT_TITLE`,帧 = 类别序号 |
| 2052 | `ROOM_OPT_BOX_TPL` | **模板** | 选择框模板(默认隐藏) | `ROOM_OPT_BOX`,帧见 §1.1 公式 |
| 2053 | `ROOM_OPT_TEXT_TPL` | **模板** | 选项文字模板(默认隐藏,兼作房卡附注) | —— |
| 2050–2052 | `ROOM_CAT_TITLE_1..3` | 图片 ×3 | 类别标题(牌局 / 模式 / 规则) | `ROOM_CAT_TITLE`,帧 = 1 / 2 / 3 |
| 2053–2054 | `ROOM_BOX_ASET_1..2` | 图片 ×2 | 局数选择框(6局 / 12局) | `ROOM_OPT_BOX`,单选帧 1–2 |
| 2055–2056 | `ROOM_TEXT_ASET_1..2` | 文字 ×2 | 局数选项文字 | —— |
| 2057–2058 | `ROOM_BOX_CARD_1..2` | 图片 ×2 | 扣卡选择框(房主 / AA) | `ROOM_OPT_BOX`,单选帧 1–2 |
| 2059–2060 | `ROOM_TEXT_CARD_1..2` | 文字 ×2 | 扣卡选项文字 | —— |
| 2061 | `ROOM_TEXT_CARD_COST` | 文字 | 房卡消耗附注(灰色小字,随局数 × 扣卡联动) | —— |
| 2062–2063 | `ROOM_BOX_PEEK_1..2` | 图片 ×2 | 查牌选择框(可查 / 不查) | `ROOM_OPT_BOX`,单选帧 1–2 |
| 2064–2065 | `ROOM_TEXT_PEEK_1..2` | 文字 ×2 | 查牌选项文字 | —— |
| 2066–2067 | `ROOM_BOX_RULE_1..2` | 图片 ×2 | 附加规则选择框(傍王 / 爬坡) | `ROOM_OPT_BOX`,**复选帧 3–4** |
| 2068–2069 | `ROOM_TEXT_RULE_1..2` | 文字 ×2 | 附加规则选项文字 | —— |
**tag 分配**用框架的 `SpriteCopyUtils.createTagManager` 分段,避免三类复制精灵 tag 撞车:
共 20 个精灵。挂在平台创建房间界面所在图层(T-3)。布局配置见 §6.9b。
```js
var tagMgr = SpriteCopyUtils.createTagManager({
title: { start: 1, size: 100 }, // 类别标题
box: { start: 101, size: 200 }, // 选择框
text: { start: 301, size: 200 } // 选项文字 + 附注
});
```
**点击命中**用 `SpriteCopyUtils.hitTest(containerId, e.offsetX, e.offsetY)` 拿到 tag,再由 tag 反查是哪个 `{类别, 选项组, 选项}`——**这层映射表在渲染时一并建好**,不靠 tag 算术反推。
**清理**:关闭建房界面时 `SpriteCopyUtils.removeRange` 清掉三段 tag。
> 挂在平台创建房间界面所在图层(T-3)。布局配置见 §6.9b。
> 只占 4 个精灵 ID(原预置方案需 21 个),且加选项不用回编辑器加精灵。
> 精灵虽预置,**渲染仍由 §1.1 的配置数据驱动**:配置里每个选项声明自己用哪个精灵键、`type`(决定选择框帧号)、`bit`/`value`(决定 `roomtype` 拼串)。渲染代码不认识「傍王」「爬坡」这些具体玩法名。
---
@@ -1377,9 +1372,9 @@ CARD_SIZE: {
| `下一局` 按钮 | `point` | `x:835 y:518 w:180 h:65` |
| 算奖遮罩 | `point` | `x:0 y:0 w:1280 h:720`,`opacity:0.72`(透明度也是配置项) |
### 6.9b 建房规则选项配置(§1.1,精灵复制)
### 6.9b 建房规则选项配置(§1.1)
布局是**两层嵌套**:类别竖排,类别内的选项组横排。复制精灵的坐标是**相对容器**的偏移,`LayoutSolver` 求解后直接作为 `SpriteCopyUtils.create(parentId, tplId, x, y, tag)` 的 `x/y`。
布局是**两层嵌套**:类别竖排,类别内的选项组横排。
| 部件 | kind | 参数(按参考图比例估,实际以平台建房界面尺寸为准) |
| --- | --- | --- |
@@ -1487,8 +1482,7 @@ codes/config/
| **T-26** | 自己发的提示是否需要本地回显气泡(协议不回执,默认看不到) | §6.6 SELF 气泡 |
| **T-27** | 埋牌双排的分行策略(参考图 17/19,依据未知) | §6.7 配置值 |
| **T-28** | `EQW_Layout` 与 `Game_Modify.PLAYER_INFO_LAYOUT` 的坐标一致性如何保障(转发壳不能引用 codes) | §6.11 同步机制 |
| **T-29** | 已出牌区(28 × 3 = 84 个预置精灵)是否也改精灵复制?需先确认复制精灵能满足叠压 z 序与出牌动画 | §5.6a 判据表;可省 ~80 个精灵 ID |
| **T-30** | 建房界面的整体位置与可用尺寸(依赖平台创建房间界面,与 T-3 同源) | §6.9b 的 anchor 起点 |
| **T-29** | 建房界面的整体位置与可用尺寸(依赖平台创建房间界面,与 T-3 同源) | §6.9b 的 anchor 起点 |
### 7.3 开发前置条件