相关疑难解决方法(0)

System.currentTimeMillis vs System.nanoTime

精度与 精确

我想知道的是在更新我的对象在游戏中的位置时是否应该使用System.currentTimeMillis()System.nanoTime()?它们的运动变化与自上次呼叫后经过的时间成正比,我希望尽可能精确.

我读过不同的操作系统之间存在一些严重的时间分辨率问题(即Mac/Linux的分辨率几乎为1毫秒,而Windows的分辨率为50毫秒).我主要在Windows上运行我的应用程序,50ms分辨率似乎非常不准确.

有没有比我列出的两个更好的选择?

有什么建议/意见吗?

java timer time-precision

370
推荐指数
7
解决办法
37万
查看次数

Android流畅的游戏循环


我在OpenGL中平滑滚动有问题(在SGS2和ACE上测试)
我创建了简单的应用程序 - 只有固定速度的水平滚动图像,或者只有一个图像(播放器)通过加速器移动,但它的运动不顺畅:-(
我试过了许多代码但不满意......

首先我尝试使用GLSurfaceView.RENDERMODE_CONTINUOUSLY并将所有代码放到onDrawFrame:

    public void onDrawFrame(GL10 gl) 
    {
      updateGame(gl, 0.017f);
      drawGame(gl); 
    }
Run Code Online (Sandbox Code Playgroud)

这是最简单,最绝对的顺畅! - 但它取决于硬件速度(=无用)


    public void onDrawFrame(GL10 gl) 
    { 
      frameTime = SystemClock.elapsedRealtime();        
      elapsedTime = (frameTime - lastTime) / 1000; 
      updateGame(gl, elapsedTime);
      drawGame(gl); 
      lastTime = frameTime; 
    }
Run Code Online (Sandbox Code Playgroud)

这是最好的,但它不像以前那样流畅,有时轻弹


我试过GLSurfaceView.RENDERMODE_WHEN_DIRTY,在onDrawFrame我只有绘图对象和这个代码在单独的线程中:

   while (true) 
   {
     updateGame(renderer, 0.017f);
     mGLSurfaceView.requestRender();
     next_game_tick += SKIP_TICKS;
     sleep_time = next_game_tick - System.currentTimeMillis();
     if (sleep_time >= 0) 
     {
       try 
       {
          Thread.sleep(sleep_time);
       } 
       catch (Exception e) {}
       }
       else 
       {
         Log.d("running behind: ", String.valueOf(sleep_time)); …
Run Code Online (Sandbox Code Playgroud)

java android opengl-es opengl-es-2.0

19
推荐指数
1
解决办法
1万
查看次数

java中的时间同步

在for-loop中,我通过检索和处理车辆信息来控制基于模拟步骤的交通模拟器SUMO.为了确保我的程序"实时"模拟(1个模拟步骤= 1秒),我想在处理阶段之后睡眠我的程序,直到下一个步骤开始.为了获得更好的结果,我正在根据最初采用的参考时间戳计算时间戳.

循环看起来像这样:

    System.out.println("start of traffic simulation ...");

    for (int i = 0; i < stepCount; i++)
    {
        System.out.println("step: " + i);

        // set before timeStamp
        beforeTimeStamp = System.currentTimeMillis();

        if (firstStep)
        {
            // get reference timeStamp
            referenceTimeStamp = beforeTimeStamp;
            firstStep = false;
        }
        else
        {
            // get next vehicleVector
            vehicleVector = masterControl.traCIclient.simulateStep();
        }

        // process vehicleVector

        // set after timeStamp
        afterTimeStamp = System.currentTimeMillis();

        processingTime = afterTimeStamp - beforeTimeStamp;

        // calculate sleepTime
        sleepTime = referenceTimeStamp + ((i + 1) * 1000) …
Run Code Online (Sandbox Code Playgroud)

java simulation multithreading synchronization timestamp

3
推荐指数
1
解决办法
4123
查看次数

Java毫秒精度

是否有一个Java API /建议使用而不是System.currentTimeMillis()来获取Windows上毫秒秒精度的当前时间 - 要求是两个后续调用,其中睡眠时间为1ms,应给出两个不同的时间 - 目前我需要明确睡眠15毫秒以获得不同的时间

java

0
推荐指数
2
解决办法
4108
查看次数