因此,我正在尝试为我的游戏引擎制作一个简单的物理引擎,从而重新发明轮子(并学习很多东西).我一直在网上搜索,尝试(并失败)解决我当前的问题.关于这个问题有很多资源,但我发现的那些资源似乎都不适用于我的案例.
短暂的问题:当两个矩形碰撞时,碰撞分辨率在某些角上无法正常工作.失败的方式因矩形的大小而异.我正在寻找的是碰撞的"最短重叠"解决方案或另一个相当简单的解决方案(我愿意接受建议!).(向下滚动以获得更好的解释和插图).
警告:以下代码可能效率不高......
首先,这是我的物理循环.它只是循环遍历所有游戏实体并检查它们是否与任何其他游戏实体发生冲突.它效率不高(n ^ 2和所有这些),但它现在有效.
updatePhysics: function(step) {
// Loop through entities and update positions based on velocities
for (var entityID in Vroom.entityList) {
var entity = Vroom.entityList[entityID];
if (entity.physicsEnabled) {
switch (entity.entityType) {
case VroomEntity.KINEMATIC:
entity.pos.x += entity.vel.x * step;
entity.pos.y += entity.vel.y * step;
break;
case VroomEntity.DYNAMIC:
// Dynamic stuff
break;
}
}
}
// Loop through entities and detect collisions. Resolve collisions as they are detected.
for (var entityID in Vroom.entityList) {
var entity = …Run Code Online (Sandbox Code Playgroud)