在我的碰撞检测中感到紧张

时间:2012-06-24 19:48:23

标签: java math trigonometry

所以我正在做一个简单的碰撞检测,玩家每次更新时都会向下移动3而不是在地面上,但是当它在地面时它会移动它的位置和地面的差异。但是我感到紧张(它正在向下移动太多,并没有完全处于停滞状态)。

我的问题是:如何使此代码正确计算差异?

Vector3f pos = new Vector3f(25,-50,25);
//Vector3f pos = new Vector3f(25,-50,25); isn't actually in the update method, 
//but is in the object's constructer.

onGround = false;

Vector3f projPos = new Vector3f(pos);
projPos.y += fallSpeed;
//get a vector of all the triangles touching the player
Vector<Tri> tris = getTrisTouching(pos);

float minY;

//make it so if we don't have a list we don't get tossed into infinity
if(tris.size() > 0) minY = Float.POSITIVE_INFINITY;
else minY = 0;

for(int i = 0; i < tris.size(); i++){
    Tri tri = tris.get(i);
    if(projPos.y + radius <= tri.max.y){

        float difference = tri.min.y - projPos.y;
        if(difference < minY) minY = difference;
        onGround = true;
    }
}

if(onGround){
    pos.y = minY;           
}

else{
    pos.y = projPos.y;
}

1 个答案:

答案 0 :(得分:2)

您的碰撞检测代码(第一个'if'语句中的3行)令人困惑,但我们假设当您在地面时,玩家不会碰到任何三角形(因为它可能在它们上方1个像素) ),所以下一帧你向下移动,然后下一帧你被移回。

修复可能是在for-loop中使用projPos而不是实际位置。