2011-12-25 159 views
0

無論出於何種原因,我的角色向左移動的速度都比右移動得快。它至少快兩倍。幀率獨立動畫問題

下面是檢查字符移動代碼的部分:

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; 
    } 
} 

現在,我的第一個猜測是計時器的活動有,但是,即使是在靜態值將像accel * (50/1000.f)導致相同的行爲。

現在,如果我只是告訴職位是+= and -= 2,它工作得很好。有任何想法嗎?

+0

什麼是position.x的類型? – 2011-12-25 05:33:28

+0

'struct XY {GLuint x,y; };' – grep 2011-12-25 05:36:56

回答

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截斷)。

由於您使用GLuintposition.x,試着加上或減去之前截斷調整成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 2011-12-25 06:10:49