2012-11-05 23 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。这次真是万分感谢! –