Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 实现重力到射弹的增量时间问题_Android_Projectile - Fatal编程技术网

Android 实现重力到射弹的增量时间问题

Android 实现重力到射弹的增量时间问题,android,projectile,Android,Projectile,我正试图在Android(使用openGL)中实现一个简单的投射运动。 我想给我的世界添加重力,真实地模拟一个球的下落 我只需使用增量时间更新渲染器,增量时间由以下公式计算: float deltaTime = (System.nanoTime()-startTime) / 1000000000.0f; startTime = System.nanoTime(); screen.update(deltaTime); 在我的屏幕中。更新(deltaTime)方法:

我正试图在Android(使用openGL)中实现一个简单的投射运动。 我想给我的世界添加重力,真实地模拟一个球的下落

我只需使用增量时间更新渲染器,增量时间由以下公式计算:

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

    screen.update(deltaTime);
在我的
屏幕中。更新(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
现在问题来了

  • 如果我将
    deltaTime
    静态设置为
    0.07
    ,则动画正常运行。但是由于
    update()
    方法运行得尽可能快,因此球的长度和速度因设备而异

  • 如果我不触摸
    deltaTime
    并运行程序(deltaTime在0.01-0.02之间,使用我的测试设备),动画长度和球的速度在不同的设备上是相同的。但是动画太慢了


我做错了什么

增加每帧的更改量?这将使动画速度提高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

增加每帧的更改量?这将使动画速度提高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

一次修正,您必须将每个deltaTime乘以5才能更快地运行动画x5。谢谢你!一次修正,您必须将每个deltaTime乘以5才能更快地运行动画x5。谢谢你!