本次更新增加了补给效果 目前只有两种效果
- 增加攻击力 20%
- 增加无敌时间 50%
数据定义如下
/**
* describe:效果描述
* effTime:持续时间
*/
const effData = [
{
describe: "增加 25% 攻击力,持续一分钟",
describeEnd: "攻击力增幅时间结束",
efftTime: 60000,
nowEfftTime: 0,
range: 0.25,
keyName: 'hurt'
},
{
describe: "增加 50% 受伤无敌时间,持续一分钟",
describeEnd: "无敌时间增幅时间结束",
efftTime: 60000,
nowEfftTime: 0,
range: 0.5,
keyName: 'playInvincibleTimer'
}
];
控制层如下:
class EfftControl {
constructor() {
this.efftData = {}
}
// 添加效果的封装
addEff(efftKey, efftData, callback) {
// 如果有 则清除
if (intervalStore.hasOwnProperty(efftKey)) {
intervalStore.remove(efftKey)
}
this.efftData[efftKey] = efftData
efftData.nowEfftTime = 0
// 添加定时器
intervalStore.add(() => {
efftData.nowEfftTime += 16
if (efftData.nowEfftTime >= efftData.efftTime) {
intervalStore.remove(efftKey)
// 回调通知时间结束
callback && callback(efftData)
}
}, efftKey)
}
}
const efftControl = new EfftControl();
使用方法:
// 玩家破坏补给
const effData = effData[Math.floor(Math.random() * effData.length)];
// 提示增加属性
notice.addNotice(effData.describe, {
color: '#4E6EF2'
})
// 属性增幅计算
increaseData[effData.keyName] = playerInfo[effData.keyName] * effData.range
// 控制类调用计时
efftControl.addEff(effData.keyName, effData, (efftData) => {
notice.addNotice(effData.describeEnd, {
color: '#4E6EF2'
})
playerInfoControl.changeHurt()
// 增幅结束
increaseData[efftData.keyName] = 0
})
实现思路:
由于有暂停的情况所以时间的记录以 16ms记录一次 也就是全局的定时器执行一次,那么在暂停的时候全局定时器会暂停但是已经记录的函数不会清楚 所以再执行也不用担心上一次记录在哪了。
累加的方式 只需要判断是否超出了当前的记录的预定值 就可以进行调用回调了
如果有重复调用则会重新开始计时。