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?
大致写了一个,当然不是就是按这样设计,只是说,一个来说,区间应该是需要具体数据配置的,写死不太好,当然也可以用常量替代;另一个具体的区间伤害衰减比例可以根据自己的需求去制定,我这里是制定了一个规则,就是参数注释里的那些,也大可以弄成区间和伤害比例都是传入指定的。
这一切还是要看你的业务需求,你自己写的函数其实也没有啥问题,除了这里
有点奇怪赞

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

