【发布时间】:2019-10-14 06:58:21
【问题描述】:
我为我目前正在开发的游戏编写了一个碰撞检测和解决系统。碰撞解决方案并没有按预期工作。有时我会在另一个圆圈内生成一个圆圈,当这种情况发生时,我希望内圆圈慢慢移出另一个圆圈的直径,但目前我正在工作的代码非常快速且不和谐。它会立即传送到圆圈之外,而不是缓慢的过渡。
我知道我当前使用的代码告诉圆圈它应该在哪里,所以我只需要慢慢地将圆圈移动到那个位置。但事实证明这很困难。
我尝试了几个解决方案,其中一个包含在下面的代码中。我还尝试使用线性插值将圆移动到其当前位置,即碰撞算法告诉它应该在的位置。那也不能正常工作。
//r is the radius of the circle
var dx = cell.x - cell2.x;
var dy = cell.y - cell2.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < cell.r + cells2.r && cell.r > cells2.r){
var unitX = dx/distance;
var unitY = dy/distance;
cell.x = cells2.x + (cell.r + cells2.r + 1) * unitX;
cell.y = cells2.y + (cell.r + cells2.r + 1) * unitY;
//Ive tried below, but the results were not correct.
//cell.x += (cells2.x + (cell.r + cells2.r + 1) * unitX)*0.5;
//cell.y += (cells2.y + (cell.r + cells2.r + 1) * unitY)*0.5;
}
【问题讨论】:
标签: javascript geometry game-physics collision