体力上限的流失是一个不可逆的过程。所以太阳神三国杀中是没有专门的增长体力上限的方法的啦。然而有时候我们的确需要增长体力上限,例如技能若愚。那么,这又该怎么做才好呢?
</br>参考了若愚的代码实现后我们发现,Room中的一个成员函数在这里起到了关键性的作用。这个函数就是`setPlayerProperty`,译为“设置玩家属性”。它的原型是:
```
setPlayerProperty(player, property_name, value)
```
![](https://img.kancloud.cn/9a/ac/9aac3ddfe603dca2a1add7e5dce396a8_952x27.png)
</br>其中:
1. `player`表示被设置属性的玩家对象;
2. `property_name`表示具体的属性名字;
3. `value`表示新的属性值。
</br>那么,这个函数是怎样完成增长体力上限的任务的呢?
</br>原来,体力上限本身就是玩家对象的一种属性,它的名字是`maxhp`,只要将它的值找到,增加一点,然后放回去,就能够实现增长体力上限的任务了。
</br>所以首先我们要先获取到玩家对象的体力上限,使用的是Player的一个成员函数`getMaxHp()`:
![](https://img.kancloud.cn/0a/44/0a44847a851f207594618f82abc25b8b_216x24.png)
</br>然后呢?计算出新的体力上限值,并把它作为传递给value参数。
</br>不过由于属性的多样性,`value`的取值也是多种多样的,所以它被太阳神三国杀设计成了可以保存多种类型的sgs.QVariant形式,没错,就跟那个环境数据`data`一样。这个形式是不能直接用“=”赋予数值的,需要采用它提供的一个方法:`setValue`。
</br>所以,使用`setPlayerProperty`增长体力上限的代码就是:
![](https://img.kancloud.cn/eb/de/ebde1279cfec25917af3fe4e7b59c7c4_589x225.png)
</br>现在,这个技能就变成了:
> 灭妖:每当你对一名角色造成一次伤害后,你可以令该角色增加1点体力上限。
</br>(孙悟空:这还是灭妖么?……孙坚:别看我,妖和我没关系……)
</br>到游戏中体验一下吧:
![](https://img.kancloud.cn/15/87/1587c5766d2e4364c9dd6840f5ca432a_742x387.png)
</br>忽然想起我们之前设计的锁定技自满会在回合开始时先对自己造成一点伤害,然后恢复一点体力。所以我们会看到这样刚开始就询问灭妖技能的情况。果断点确定!
</br>结果……
![](https://img.kancloud.cn/31/66/31667f268b71040f544c462010b5b50c_220x173.png)
</br>当然,通过直接设置属性改变体力上限是没有提示显示在游戏记录中的。所以我们只能在游戏记录中看到技能的发动情况啦。如果要显示"孙悟空 增加了1点体力上限"之类的提示信息,就要用到曾经我们提到的LogMessage结构体了。
</br>先在翻译表中写一个消息结构:
![](https://img.kancloud.cn/e9/06/e906261a18e43c6dce8ada14ebd8af59_537x53.png)
</br>然后,添加代码:
![](https://img.kancloud.cn/1d/b1/1db11e5d795b7faa638f3f8430beb57e_334x137.png)
</br>这下就好多了:
![](https://img.kancloud.cn/fa/f4/faf4d361d7d96666d24dd6ef50bf9dec_226x97.png)
</br>成功!
- 编写说明
- 第一章 创建一个新武将
- 1.1 开发环境准备
- 1.2 创建一个新的武将扩展包
- 1.3 创建我们的新武将
- 第二章 添加技能
- 第三章 武将美化
- 3.1 美化环境准备
- 3.2 添加武将卡牌
- 3.3 添加武将头像
- 3.4 添加武将标签
- 第四章 创建一个新技能
- 第五章 添加音效
- 5.1 打造自己的声音工作室
- 5.2 添加技能使用音效
- 5.3 添加武将阵亡音效
- 第六章 添加提示信息
- 6.1 添加代码注释
- 6.2 显示提示信息
- 6.3 启动全屏信息特效
- 第七章 武将变更
- 第八章 启用AI
- 8.1 创建我们的AI文件
- 8.2 真实的AI
- 8.3 动手写AI
- 第九章 修改距离
- 第十章 技能管理
- 10.1 技能判定
- 10.2 创建技能
- 10.3 获得技能
- 10.4 失去技能
- 第十一章 修改手牌上限
- 第十二章 体力变更
- 12.1 流失体力
- 12.2 制造伤害
- 13.3 恢复体力
- 12.4 流失体力上限
- 12.5 增长体力上限
- 第十三章 游戏进程的变更
- 13.1 创建阶段触发技能
- 13.2 跳过回合阶段
- 13.3 插入一个额外的回合阶段
- 13.4 启用翻面
- 13.5 获得一个额外的回合
- 第十四章 启用标记(Mark)
- 14.1 添加标记
- 14.2 获得标记
- 14.3 失去标记
- 14.4 查看标记数目
- 第十五章 卡牌转换
- 15.1 主动牌的转换
- 15.2 被动牌的转换
- 第十六章 卡牌传递
- 16.1 创建摸牌技能
- 16.2 游戏中摸牌
- 16.3 游戏中弃牌
- 16.4 从其他武将处获得牌
- 16.5 判断目标区域是否有牌
- 16.6 移动场上的牌
- 第十七章 用牌实现技能效果
- 第十八章 启用标志(Flag)
- 第十九章 涉足判定领域
- 19.1 启用判定
- 19.2 更改判定
- 19.3 获得判定牌
- 第二十章 私家牌堆
- 20.1 向牌堆中添加牌
- 20.2 查看牌堆中牌的数量
- 20.3 从牌堆中移除牌
- 第二十一章 牌的锁定
- 第二十二章 免疫牌
- 第二十三章 让房间提供牌
- 23.1 提供主动牌
- 23.2 提供被动牌
- 第二十四章 启用标签(Tag)
- 第二十五章 濒死结算
- 第二十六章 交换座次
- 第二十七章 创建主公技
- 27.1 创建由主公发起的主公技
- 27.2 创建由他人发起的主公技
- 第二十八章 强力技能
- 28.1 直接死亡
- 28.2 改换身份
- 28.3 原地复活
- 28.4 立即胜利