所以我前段时间建了一个Breakout克隆,我想稍微升级它,主要是为了碰撞.当我第一次做到这一点时,我的球和我的砖之间有一个基本的" 碰撞 "检测,实际上将球视为另一个矩形.但是这会产生边缘碰撞的问题,所以我想我会改变它.问题是,我找到了我的问题的一些答案:例如这个图像 ball_deflection.jpeg和这个线程的最后一个评论:圆/ 矩碰撞反应,但我找不到如何计算最终的速度矢量.
到目前为止,我有:
- 找到矩形上最近的点,
- 创建法线和切线向量,
现在我需要的是以某种方式"将速度矢量划分为法线分量和切线分量;否定法线分量并添加法线和切线分量以获得新的速度矢量"如果这看起来非常简单,我很抱歉我无法理解......代码:
function collision(rect, circle){
var NearestX = Max(rect.x, Min(circle.pos.x, rect.x + rect.w));
var NearestY = Max(rect.y, Min(circle.pos.y, rect.y + rect.w));
var dist = createVector(circle.pos.x - NearestX, circle.pos.y - NearestY);
var dnormal = createVector(- dist.y, dist.x);
//change current circle vel according to the collision response
}
Run Code Online (Sandbox Code Playgroud)
谢谢 !
编辑:也找到了这个,但我不知道它是否适用于矩形的所有点或只有角落.