下载 App
开发日志2 · 2026-10-05
## 今天做了什么
三件事:**加了挂机推演**、**做了拖拽出牌**、**重排了底部界面**。
中间那件占了大半时间,而且**连续失败了三轮**。
---
## 一、挂机推演:一个问题用一个数字解决
### 需求
玩家离开期间,文明应该继续自行延续。回来时结算这段时间。
核心约束是**绝对安全**——挂机不该让玩家回来发现自己文明没了。
### 我一开始想复杂了
第一版做完,我做了件当时觉得多余、后来证明最值钱的事:**把数值按公式手算了一遍**。
算完发现一个要命的问题:按当时的参数,离线大约十几分钟就会把资源耗光。而资源归零 + 混乱度累积,**正好是「大饥荒」结局的触发条件**。
也就是说,玩家离开两天回来,会发现文明已经没了。
### 三个补救方案,都被推翻了
我提了三个补丁方案,本质都是"饥饿发生之后怎么收场"。
讨论时冒出了第四个思路:**把离线上限压短**。
试算了一下——上限压到某个值之后,资源根本扣不到零,科技也涨不到飞升阈值。**两个隐患,一个数字同时解决。**
我原本的三个方案都是在打补丁,而这个改动是**让问题根本不发生**。
### 还顺手去掉了一个惩罚
原来资源耗尽会追加混乱度。上限压低后正常存档碰不到了,但如果玩家**离开时资源本来就低**,还是会被推到覆灭边缘。
去掉了。挂机是"文明自行延续",不该反过来把玩家推向结局。
---
## 二、拖拽出牌:连续三轮失败
这是今天最花时间、也最值得记录的部分。
### 想要的效果
把卡牌从手牌区**拖到 3D 沙盘上松手**,就直接使用这张牌。
### 第一轮:完全没反应
拖了没反应,但"待生效区"能正常出现。
日志一打出来,问题很明显:
```
按下卡片 @ (618, 415)
```
**卡片本身只有一百多像素宽**,局部坐标不可能是这个数。
去翻引擎代码才发现,我用的那个坐标换算函数,**返回的其实是屏幕坐标**,没有减去父级容器的位置。换算错了,落点判定永远是"不在沙盘内"。
这是第一个坑:**用了一个我没验证过的 API**。
### 第二轮:换个坐标来源,结果更糟
既然局部坐标不可靠,我改用**引擎触摸事件的绝对坐标**。
改完,上一轮还能用的拖拽**彻底不生效了**。
原因是我把坐标转发**挂在了"底部屏蔽区"的分支里**——但卡片在布局上位于屏幕中下部,**根本不在那条线以下**,所以坐标从来没被转发过。
这是第二个坑,而且是**我自己新引入的**:**用"位置"判断该不该处理,而不是用"有没有卡被按住"**。
修法是换判断依据。拖拽是否接管,取决于"有没有卡片被按下",跟坐标在哪无关。
### 第三轮:还有一个隐藏问题
改完能用了,但我在深度检查时发现一个**时序 bug**:
界面层和场景层**订阅的是同一个松手事件**,而且界面层先执行。所以松手时,界面层的"点击"判定**跑在场景层清理拖拽之前**——我的"这次是拖拽、别当点击"标志,设得太晚,永远来不及生效。
后果是:拖完松手如果恰好还落在卡片上,会被误判成"选中"。
修法很简单——**标志提前设**,拖拽一激活就置位,不等到松手。
### 顺带修掉的
检查时还发现两处状态残留:**切后台**和**切换世界**时拖拽状态没清理,会导致下一次操作错乱。一并修了。
---
## 三、底部界面重排
原来是三行堆叠的整体面板,改成**三块独立浮起**:左边显示信息,中间是卡槽,右边是按钮。
改完发现两个问题:
**卡槽文字被截断。** 描述文字原本只允许两行,但双数值的卡(比如同时加科技和混乱)换行后需要第三行,被省略号吃掉了。加高卡片、放开行数解决。
**按钮文字消失。** 这个更有意思——不是按钮不见了,是**文案太长被裁**。选中卡牌后按钮文字会变成"推演下一回合(结算 2张/3AP)",二十个字塞进一百多像素的窄列里,直接被裁光,看起来像按钮没了。
精简文案解决。
---
## 四、今天的几点体会
**1. 算一遍,比想一遍有用**
挂机那个问题,如果我只看设计文档,会觉得"上限高一点玩家收益更多"。**手算一遍公式**才发现它会把玩家送进结局。
数值设计里,**直觉经常是错的,算术不会**。
**2. 我引入的 bug 比我修的 bug 更值得记**
拖拽那三轮,第一轮的错是用了没验证的 API,**第二轮的错是我自己改出来的**——为了修 A,引入了 B。
而且第二轮那个错误特别典型:我用"坐标在不在某个区域"来判断该不该处理拖拽。但**卡片本来就不在那个区域里**。判断依据选错了,逻辑再对也没用。
**3. 同一个功能的连续失败,通常不是同一个原因**
三轮失败,三个独立原因:坐标来源错、判断依据错、时序错。
中间我一度以为"是不是阈值调得不对",想调参数蒙混过去。**但如果根因是结构性的,调参数只会让问题更难查。**
**4. 深度检查是有价值的**
第三轮的时序 bug,**功能表面上是正常的**——能拖、能用。只有认真过一遍代码才发现:拖完松手落在卡片上会误选中。
这类问题测试员不一定能复现,但玩家迟早会撞上。
---
## 五、当前进度
**已完成**
- 挂机推演(含安全边界)
- 拖拽出牌(常规卡 + 特殊卡)
- 底部界面重排
- 拖拽链路的深度检查与修复
**接下来**
- **数值平衡实测** ← 仍然是最高优先级
- 美术素材补齐
- 交互手感打磨(拖拽阈值需要真机确认)
最后一条补充说明:拖拽的触发距离我设了一个值,但**这个参数只能靠手感判断**,我调不了,需要实际拿着手机试。
---
*明天继续开始做美术优化了,可以期待一波美术效果。





