2012-11-05 26 views
1

我試圖在Android中實現一個簡單的彈丸運動(使用openGL)。 我想給我的世界增加引力來模擬一個球的實際下降。實現重力到彈丸 - 德爾塔時間問題

我只是用它的計算方法是一個增量時間更新我的渲染:

float deltaTime = (System.nanoTime()-startTime)/1000000000.0f; 
    startTime = System.nanoTime(); 

    screen.update(deltaTime); 

在我screen.update(deltaTime)方法:

if (isballMoving) { 
     golfBall.updateLocationAndVelocity(deltaTime); 
    } 

而且在golfBall.updateLocationAndVelocity(deltaTime)方法:

public final static double G = -9.81; 

double vz0 = getVZ0(); // Gets initial velocity(z) 
double z0 = getZ0(); // Gets initial height 
double time = getS(); // gets total time from act begin 
double vz = vz0 + G * deltaTime; // calculate new velocity(z) 
double z = z0 - vz0 * deltaTime- 0.5 * G * deltaTime* deltaTime; // calculate new position 

time = time + deltaTime; // Update time 
setS(time); //set new total time 

現在這是問題;

  • 如果我設置deltaTime0.07靜態,那麼動畫運行正常。但由於update()方法的運行速度更快,球的長度和球速因設備而異。

  • 如果我不觸摸deltaTime並運行程序(deltaTime的值介於0.01 - 0.02與我的測試設備之間),動畫長度和球的速度在不同設備上是相同的。但動畫太慢了!

我在做什麼錯?

回答

1

增加每幀更改的數量?這應該使您的動畫速度提高5倍:

double vz = vz0 + G * deltaTime * 5; // calculate new velocity(z) 
double z = z0 - vz0 * deltaTime- 0.5 * G * deltaTime* deltaTime * 5; // calculate new position 
+0

一個更正,您必須將EVERY deltaTime與5相乘以更快地運行動畫x5。這次真是萬分感謝! –