浏览器游戏中火箭摧毁建筑所需时间计算异常问题求解
问题根因
你的计算逻辑混淆了「每秒发射火箭数量」和「单枚火箭发射间隔」的换算关系:原代码直接用需要的火箭总数乘以rocketSpeed,相当于把「每秒发射数」当成了「单枚发射耗时」,完全违背了实际逻辑——发射速度越高,总耗时应该越短,原公式在rocketSpeed<1时得到的结果反而比正常情况更小,自然不符合预期。
举你给出的例子验证:rocketSpeed=0.625代表每秒发射0.625枚火箭,单枚发射的间隔实际为 1 / 0.625 = 1.6 秒,17枚火箭的耗时肯定远大于17秒,而不是原代码算出的10.625秒。
修正方案
根据游戏实际的发射规则二选一即可:
方案1:第一发无前置冷却,按下攻击立即发射
这种规则下,N枚火箭只需要等待N-1次发射间隔,计算逻辑如下:
// 每秒发射的火箭数量 const rocketSpeed = 0.625; // 单枚火箭伤害 const attackDamage = 60; // 建筑生命值 const buildingHitPoints = 1000; // 摧毁建筑需要的火箭总数 const numberOfRockets = Math.ceil(buildingHitPoints / attackDamage); // 单枚火箭发射间隔(秒/枚) const launchInterval = 1 / rocketSpeed; // 总耗时 const requiredTime = (numberOfRockets - 1) * launchInterval;
代入你的示例参数算得结果为 16 * 1.6 = 25.6 秒。
方案2:所有火箭都有前置冷却,第一发也需要等待间隔
这种规则下,N枚火箭需要等待N次发射间隔,计算逻辑如下:
// 每秒发射的火箭数量 const rocketSpeed = 0.625; // 单枚火箭伤害 const attackDamage = 60; // 建筑生命值 const buildingHitPoints = 1000; // 摧毁建筑需要的火箭总数 const numberOfRockets = Math.ceil(buildingHitPoints / attackDamage); // 单枚火箭发射间隔(秒/枚) const launchInterval = 1 / rocketSpeed; // 总耗时 const requiredTime = numberOfRockets * launchInterval;
代入你的示例参数算得结果为 17 * 1.6 = 27.2 秒。
补充说明
如果你的游戏设定里火箭飞抵目标还需要额外的飞行时间,直接在上述requiredTime的基础上加上固定飞行时长即可。
内容的提问来源于stack exchange,提问作者vasire2008
相关产品推荐
相关产品推荐

