请问爆炸伤害的计算公式?

2D游戏里,再某点产生一个爆炸,假设点是(x,y),它的爆炸半径是100个像素,在中心点附近的伤害是10,在最边缘的位置伤害应该设置为多少比较合适?1? 5?
然后怎么根据目标与爆炸中心点的距离来计算它受到的伤害呢?
harm = 10 * (1 - sqrt(dis/radius)) ?

用分段的函数?

你的公式没啥问题,但一般会设计为按离爆炸中心距离的比例区间来决定最终伤害,虽然你也可以直接按距离远近等比例换算,但那样对玩家是完全无法估计的

1赞

能说的更详细一点吗?我现在用的是这样的函数来计算:

export function getExplosionHarm(maxHarm: number, radius: number, distance: number) {
        let harm = 0;
        if (distance > radius) {
            harm = 0;
        }
        else if (distance > radius * 0.9) {
            harm = maxHarm * 0.1;
        }
        else if (distance < radius * 0.1) {
            harm = maxHarm;
        }
        else {
            harm = maxHarm * (1 - (distance / radius - 0.1) / 0.8 * 0.9);
        }
        return harm;
    }

怎么分段? Math.floor(10 * dis/radius) /10,这样从0.1, 0.2, 0.3 … 0.9, 1.0?


大致写了一个,当然不是就是按这样设计,只是说,一个来说,区间应该是需要具体数据配置的,写死不太好,当然也可以用常量替代;另一个具体的区间伤害衰减比例可以根据自己的需求去制定,我这里是制定了一个规则,就是参数注释里的那些,也大可以弄成区间和伤害比例都是传入指定的。

这一切还是要看你的业务需求,你自己写的函数其实也没有啥问题,除了这里

有点奇怪

:+1::+1:

那个公式是按距离线性衰减的,就是太敏感,应该先分成10段,每段不一样,
这种比较符合期望