我该如何实施2D爆炸,以使其对隐藏在板条箱或其他封面后面的角色造成的损坏减少?理想情况下,损坏将取决于盖的强度(例如,金属墙比木箱能提供更好的保护)。理想情况下,损伤也会随着距离的增加而减少。
我将使用Box2D物理引擎-Farseer的端口。
谢谢。
我该如何实施2D爆炸,以使其对隐藏在板条箱或其他封面后面的角色造成的损坏减少?理想情况下,损坏将取决于盖的强度(例如,金属墙比木箱能提供更好的保护)。理想情况下,损伤也会随着距离的增加而减少。
我将使用Box2D物理引擎-Farseer的端口。
谢谢。
Answers:
一种相对简单的方法是从爆炸中心到每个实体的中心DISTANCE(explosion,entity) < exlosion.max_radius
(伪代码)绘制射线。
对于每个实体,请遵循此射线,以减少基础伤害。每当您碰到物体时,就从伤害中减去其掩盖值(实质上是缩短射线)。
当射线撞击实体时,剩下的任何伤害就是爆炸伤害。
对于这种方法,您可能需要一个相当高的基础伤害,该伤害会随着距离的增加而迅速减小(与距离的平方成反比的关系应该很好)。
另一种方法是绘制一个完全包含实体的部门。但没有更广泛 一直到.max_radius
。从该部门的面积减去爆炸物与实体之间的任何险种所覆盖的面积乘以其险种价值。剩下的区域就是爆炸伤害。
这样做的一个很好的副作用是,实体距离爆炸越近,该部门越宽,遭受的伤害也就越大(因为您计算了该部门的所有面积,只需减去两个实体之间的覆盖面积即可)。实体和爆炸。
将掩护视为实体也可能是有用的;并从较远的实体中减去较近的实体所遭受的损害,但这可能会令人生厌。
无疑存在着一种更为优雅和巧妙的方法,但是它可能需要进行一些非常讨厌的演算。它总是如此。
损害随着距离的减少而减少应该是一个简单的任务。创建爆炸时,您应该知道爆炸中心的坐标。由于您是在2d模式下工作,因此只能是x和y。
您所需要做的就是使用毕达哥拉斯定理计算玩家与爆炸中心坐标的距离,然后将其与最大半径相对应,以计算总伤害的百分比。
例如,将坐标(x1,y1)作为爆炸的中心点,将(x2,y2)作为玩家的坐标。然后,我们可以计算受到的损害,如下所示:
Distance from centre = sqrt((x2-x1)² + (y2-y1)²)
Damage taken = (Distance from centre/Explosion radius) * max damage
至于顺便说一句,我太累了,想不出答案,但您基本上是在寻找从爆炸中心到玩家的直线交叉点。