军争时代,节奏加快,距离的重要性大大加强了。对于一个跟头十万八千里的孙悟空来说,当然不能忍受落在他人的后面!筋斗云,我们一起去代码里面讨个公道……
</br>好吧,那么这次我们就要为我们的新武将创建这样一种可以用来修改距离的技能。
</br>先把马术的代码拿来研究一下:
![](https://img.kancloud.cn/49/cc/49cccf522a28d0e7dfe9f72eb3bdbdf3_468x193.png)
</br>可以看到,创建距离修改技能需要用到一个叫做`sgs.CreateDistanceSkill`的方法,其原型是:
```
sgs.CreateDistanceSkill{name, correct_func}
```
</br>这个方法有两个参数,`name`和`correct_func`。
1. `name`表示这个距离修改技能的名字;
2. `correct_func`是一个规定距离修改标准的函数,告诉电脑具体怎样计算距离。
</br>其中这个correct_func函数的原型是:`function(self, from, to)`
</br>它需要三个参数,分别是`self`、`from`和`to`。
1. `self`就是技能本身啦;
2. `from`是位于距离计算的起点处的那个角色。因为距离计算是有方向性的呀,当然需要一个起点角色,还有一个终点角色了。
3. `to`不用说了,这就应该是位于距离计算的终点处的角色了。
</br>因为距离计算的特性,距离修改技能的效果是对距离计算的双方都有影响的,所以即使我们本身没有这个技能,计算距离时也要考虑对方是否有类似的技能。故而`correct_func`函数中提供了两个角色对象`from`和`to`,用来考虑这两方面的计算情形。
</br>对于马术来讲,它的描述是“你计算与其他角色的距离时,始终-1”,所以当拥有马术的我们处于起点,其他角色作为终点的时候,马术就会起作用。而当我们自己作为终点,其它角色处于起点的时候,即使我们拥有马术,也没有效果。
</br>所以马术的代码里面,只需要考察`from`是否拥有马术这个技能,进行距离修正就可以了。可以想到,飞影的代码里,应该也只需要考察`to`就可以了。而义从的代码里面则要`from`和`to`两方面都要考虑才行。
</br>现在我们要为孙悟空设计距离修改技能了。想法是这样的:
> 腾云:你计算的与其他角色的距离-5;其他角色计算的与你的距离+5。
</br>代码如下:
![](https://img.kancloud.cn/3c/f3/3cf34f24b5d36ef0610224e14e439776_468x258.png)
</br>添加到游戏中,赶紧体验一下这种高耸入云无人能及的感觉吧!
</br>悄悄地告诉自己:太阳神三国杀的工具菜单里面可以查看当前的距离。
![](https://img.kancloud.cn/a2/88/a288c08c5f9c0549529e86c586d3508c_561x321.png)
</br>结果为:
![](https://img.kancloud.cn/bb/3d/bb3d334d966e951e140ba1e0c1a63119_557x497.png)
</br>孙悟空到装备了防御马的神吕蒙的距离为1,神吕蒙到什么装备都没有的孙悟空的距离反而是6。效果就是这么明显!
</br>至于设计实现类似“与某名角色的距离始终为1”的效果,在代码里还可以使用Room的一个成员函数setFixedDistance。这个函数的原型是这样的:
```
setFixedDistance(from, to, distance)
```
![](https://img.kancloud.cn/04/15/0415474a0373718b9efd00cebd616e4c_684x22.png)
</br>其中:
* `from`表示距离计算起点处的玩家对象;
* `to`表示距离计算终点处的玩家对象;
* `distance`表示被锁定的距离数值。
</br>这样就可以锁定两名角色之间的距离了。
</br>OK,技能设计完毕,好好欣赏孙悟空腾云驾雾的英姿吧~
- 编写说明
- 第一章 创建一个新武将
- 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 立即胜利