2011-12-25 5 views
0

이유가 무엇이든 내 캐릭터는 오른쪽보다 왼쪽으로 빨리 이동합니다. 적어도 두 배는 빠릅니다. 내 첫번째 추측은 타이머가 심지어 같은 행동 accel * (50/1000.f) 결과처럼 정적 값에 배치, 재미 행동 있지만 것, 이제프레임 속도 독립적 인 애니메이션 문제

if(moving) 
{ 
    Uint32 delta = g_delta_get_ticks(); 
    if(!g_holding_a) 
    { 
     position.x += accel * (delta/1000.f); 
     facing = right; 
    } 
    if(!g_holding_d) 
    { 
     position.x -= accel * (delta/1000.f); 
     facing = left; 
    } 
} 

: 여기

캐릭터의 움직임을 확인하는 코드의 일부입니다 .

이제 위치를 += and -= 2으로 지정하면 정상적으로 작동합니다. 어떤 아이디어?

+0

position.x의 유형은 무엇입니까? –

+0

'struct XY {GLuint x, y; }; ' – grep

답변

1

잘라내는 것이 문제의 원인입니다. some_int += some_float (또는 some_int -= some_float)이라고 말하면 산술은 부동 소수점으로 수행 된 다음 정수로 잘립니다. 따라서 some_int이 100이고 some_float이 1.5이면 some_int += some_float 이후에 101을 얻습니다 (101.5에서 잘림). 그러나 some_int -= some_float 이후에는 98을 얻게됩니다 (98.5에서 잘립니다). 당신이 position.x에 대한 GLuint을 사용하고 있기 때문에

, 추가하거나 뺀 전에 GLuint에 조정을 절단하려고 :

GLuint d = accel * (delta/1000.f); 
if (!g_holding_a) { 
    position.x += d; 
    facing = right; 
} 
if (!g_holding_d) { 
    position.x -= d; 
    facing = left; 
} 
+0

전화하세요! 그게 문제를 해결 한 것 같습니다. 나는 또한 버퍼를 교환하기 전에 시간을 재설정해야했다. 지금 생각해 보면, 많은 의미가 있습니다. 감사! – grep