ES6飞机大战篇-增加补给效果

本次更新增加了补给效果 目前只有两种效果

  1. 增加攻击力 20%
  2. 增加无敌时间 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记录一次 也就是全局的定时器执行一次,那么在暂停的时候全局定时器会暂停但是已经记录的函数不会清楚 所以再执行也不用担心上一次记录在哪了。
累加的方式 只需要判断是否超出了当前的记录的预定值 就可以进行调用回调了
如果有重复调用则会重新开始计时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值