2012-06-24 2 views
1

그래서 플레이어가 아래쪽으로 움직일 때마다 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; 
} 
+0

당신이 항상 바닥에 있지 않다고 가정하고 그 때 당신이 있는지 확인하는 것 같습니다. 나는 당신의 코드에서 너무 많이 말할 수는 없지만, 당신이 당신을 바꾸어야 할 필요가 있다고 생각한다. 당신의 접근 방식을 바꾸어서 당신이 바닥에 있는지를 알아 내고, 충돌/낙하 방식 만 수행하면된다. –

답변

2

귀하의 충돌 감지 코드 (내부의 3 개 선 문 '의 경우'첫 번째) 혼란 만의 당신이 지상에있을 때이 될 수 있으므로, 플레이어가 (어떤 삼각형을 터치하지 않는다는 것을 가정하자 위의 1 픽셀), 다음 프레임을 아래로 이동 한 후 다음 프레임을 다시 이동합니다.

아마도 실제 위치 대신에 for-loop 내부에서 projPos를 사용하는 것이 좋습니다.

+0

좋아, 내가 바꿨다. 문제의 코드가 무엇인지 (현재 코드의 질문 코드를 업데이트했습니다) 나는 여전히 바닥을 통과하고 있습니다. – CyanPrime

+0

플레이어의 위치를 ​​가장 가까운 삼각형과 플레이어의 차이로 설정하는 것이 어떤 의미인지는 알 수 없습니다. – ra4king

+0

또한 'getTrisTouching'에도 projPos를 사용할 수 있습니다. ;) 그리고 for 루프 내부의 문장이 중심에 닿는 삼각형의 목록을 얻고 있다고 가정하면 true가됩니다.) – ra4king