frameratetest.java

来自「java learn PPT java learn PPT java learn」· Java 代码 · 共 97 行

JAVA
97
字号
     import java.applet.*;
     import java.awt.*;

     public class FramerateTest extends Applet implements Runnable
     {
          // 动画线程
          private Thread animation;

          // 每一帧的最短毫秒数
          private long framerate;

          public void init()
          {
               setBackground(Color.BLACK);
               animation = new Thread(this);

               // 设置帧速为每秒60帧,(16.67 ms / frame)
               framerate = 1000/60;
          }    
        
          public void start()
          {
               // 开启动画线程
               animation.start();
          }

          public void stop() 
          {
              animation = null;
          }

          public void run() 
          {
               // 帧开始的时间time the frame began
               long frameStart;

               // 这一秒的帧数                         
               long frameCount = 0;

               // 一帧消耗的时间               
               long elapsedTime;

               // 多帧累计消耗的时间
               long totalElapsedTime = 0;

               // 实际计算出来的帧速
               long reportedFramerate;

               Thread t = Thread.currentThread();
	       while (t == animation)
               {
                    // 保存开始时间
                    frameStart = System.currentTimeMillis();                                                     
       
                    // 绘制帧
                    repaint();

                    // 计算绘制帧所消耗的时间
                    elapsedTime = System.currentTimeMillis() - frameStart;

                    // 帧速同步
                    try
                    {
                         // 确保这一帧已经过去了framerate 毫秒    
                         if(elapsedTime < framerate)
                         {
                              Thread.sleep(framerate - elapsedTime);
                         }
                         else
                         {
                              // 不要让垃圾收集器饿着
                              Thread.sleep(5);
                         }
                    }

                    catch(InterruptedException e) 
                    {
                         break;
                    }

                    // 更新实际的帧速
                    ++ frameCount;
                    totalElapsedTime += (System.currentTimeMillis() - frameStart);
                    if(totalElapsedTime > 1000)
                    {
                         reportedFramerate = (long)((double) frameCount / (double) totalElapsedTime * 1000.0);

                         // 在applet的状态栏中显示帧速
                         showStatus("fps: " + reportedFramerate); 

                         frameCount = 0;
                         totalElapsedTime = 0; 
                    }
                }  
           }   // run

     }    // FramerateTest 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?