Ejemplo n.º 1
0
 private void animationLoop() {
   while (Thread.currentThread() == animationThread) {
     try {
       double frameStartTime = System.nanoTime();
       animateNextFrame();
       double currentFrameTime = System.nanoTime() - frameStartTime;
       int timeToNextFrame = (int) ((timePerFrame - currentFrameTime) / 1000000);
       if (timeToNextFrame > 0) {
         // Adjust frame rate to minimize sleep time
         if (fps < MAX_FRAMERATE && timeToNextFrame > 1) {
           setFrameRate(calculateOptimalFrameRate(currentFrameTime));
         }
         Thread.sleep(timeToNextFrame);
       } else if (fps > MIN_FRAMERATE) {
         // Inadequate time left, decrease the frame rate
         setFrameRate(calculateOptimalFrameRate(currentFrameTime));
       }
     } catch (InterruptedException e) {
     } catch (IllegalStateException e) {
     }
   }
 }
Ejemplo n.º 2
0
 @Override
 public void init() {
   Dimension appletDimension = getSize();
   canvasWidth = appletDimension.width;
   canvasHeight = appletDimension.height;
   setFrameRate(MAX_FRAMERATE);
   // Set up animation tools
   canvas = new Canvas();
   canvas.setIgnoreRepaint(true);
   canvas.setSize(canvasWidth, canvasHeight);
   add(canvas);
   // Set up double buffer
   canvas.createBufferStrategy(2);
   buffer = canvas.getBufferStrategy();
 }