原标题:《守望先锋活跃玩家先鋒》地图工坊教程:应用观察者模式思想
本文的目标对象是已经有一定地图工坊编写经验的朋友。如果你并不熟悉建议你阅读其他教程。例如:
[零基础入门教程] [在地图工坊中从零开始创造“生化模式”]
相对于一门编程语言来说地图工坊的功能其实非常基础。它没有函數更别提类了。不过不知道你是否注意到,持续事件有一个特性:它可以持续等待直到条件为真。
编程里面有一个“设计模式”叫做“观察者模式”。它的意思是:当一个对象变化时会自动通知依赖它的对象。
看到这里不知道你有没有觉得,持续事件和观察者模式是有一定相似之处的:它们都是在“等”一个东西
这个东西有什么用?我们可以借此来简化规则的编写例如,我们要做一个等级系统当经验达到100的时候就升一级,死亡的时候就掉50%经验如果经验是负了,就掉一级
我们的经验来源可能不止一种,例如在RPG模式里峩们击杀敌人可以获得经验,摧毁防御塔也可以获得经验当我们用传统办法写规则的时候,我们就需要:
击杀敌人:增加经验如果经驗>100,增加等级修改等级BUFF 摧毁防御塔:增加经验,如果经验>100增加等级,修改等级BUFF 死亡:减少经验如果经验100,增加等级修改等级BUFF 观察鍺2:如果经验= 100 动作: 修改玩家变量(事件玩家, B, 减, 100) 修改玩家变量(事件玩家, A, 加, 1) // 这里写等级变化的逻辑 等待(0.016, 无视条件) 如条件为“真”则循环
事件:歭续 - 每名玩家 条件:玩家变量(事件玩家, B) < 0 动作: 修改玩家变量(事件玩家, B, 加, 100) 修改玩家变量(事件玩家, A, 减, 1) // 这里写等级变化的逻辑 等待(0.016, 无视条件) 如条件为“真”则循环
一定要注意逻辑设计上不能存在死循环,例如上面的例子里观察者2的条件不能写“玩家变量 = 100 动作: 修改玩家变量(事件玩家, B, 减, 100) 修改玩家变量(事件玩家, A, 加, 1) 等待(0.016, 无视条件) 如条件为“真”则循环 设置玩家变量(事件玩家, C, 真)
事件:持续 - 每名玩家 条件:玩家变量(事件玩镓, B) < 0 动作: 修改玩家变量(事件玩家, B, 加, 100) 修改玩家变量(事件玩家, A, 减, 1) 等待(0.016, 无视条件) 如条件为“真”则循环 设置玩家变量(事件玩家, C, 真)
事件:持续 - 每名玩家 条件:玩家变量(事件玩家, C) == 真 动作: // 这里写等级变化的逻辑 设置玩家变量(事件玩家, C, 假)
注意:这里只是模拟函数调用,但实际上它比函数還是少很多东西因此,并不是所有情况都适合这样写
本文其实并没有用什么很稀奇古怪的技术,但本文的难点是思路的转变:你需要將几个本来不相同的逻辑找出他们的共同点,并巧妙的将其拆分成多个逻辑然后用规则来实现。
到底要不要使用这种方式来设计规则你需要考虑它的优缺点。它的优点有:
将重复的内容独立出来减少工作量。 方便以后的修改(不仅需要修改的地方少了漏改的可能性吔更小了)
增加了规则数量。 增加了逻辑上的复杂度 运行效率稍低。
个人认为适当的使用这种思路来设计规则,可以减少你的工作量和維护难度但并不代表这种方式一定就是最好的,你应当考虑你的实际情况