frame rate - JAVA simple fps animation(how can i work with?) -


can me, how can calculate , show fps in animation? want show simple rect (for example).

if have code:

private final fps = 30; private final size = 10; private int x = 10; private int y = 0; private string myfps;  private void start(){     while(true){         moverect();         paint();      } }  private void paint(){    g2.drawrect(x, y, size, size);    g2.drawstring(myfps, 10, 10); }  private void moverect(){    x++; } 

here copypaste of old simple java graphics+bufferstrategy gameloop test app. animation loop draws few moving rectangles , fps counter.

java -cp ./lib/test.jar gameloop2 "fullscreen=false" "fps=60" "vsync=true"

//http://www.javagaming.org/index.php/topic,19971.0.html //http://fivedots.coe.psu.ac.th/~ad/jg/ch1/ch1.pdf  import java.util.*;  import java.awt.color; import java.awt.frame; import java.awt.graphics; import java.awt.graphicsconfiguration; import java.awt.graphicsdevice; import java.awt.graphicsenvironment; import java.awt.toolkit; import java.awt.event.keyevent; import java.awt.event.keylistener; import java.awt.geom.rectangle2d; import java.awt.image.bufferstrategy;  import java.awt.displaymode; // full-screen mode  public class gameloop2 implements keylistener {     frame mainframe;      private static final long nano_in_milli = 1000000l;       // num of iterations sleep delay of 0ms before     // game loop yields other threads.     private static final int no_delays_per_yield = 16;      // max num of renderings can skipped in 1 game loop,     // game's internal state updated not rendered on screen.     private static int max_render_skips = 5;      private static int target_fps = 60;      //private long prevstatstime;     private long gamestarttime;     private long currendertime;     private long rendersskipped = 0l;     private long period; // period between rendering in nanosecs      long fps;     long framecounter;     long lastfpstime;      rectangle2d rect, rect2, rect3;      /**      * create new gameloop use specified graphicsdevice.      *       * @param device      */     public gameloop2(map<string,string> args, graphicsdevice device) {         try {             if (args.containskey("fps"))               target_fps = integer.parseint(args.get("fps"));               // setup frame             graphicsconfiguration gc = device.getdefaultconfiguration();              mainframe = new frame(gc);             //mainframe.setundecorated(true);             mainframe.setignorerepaint(true);             mainframe.setvisible(true);             mainframe.setsize(640, 480);             //mainframe.setlocationrelativeto();             mainframe.setlocation(700,100);             mainframe.createbufferstrategy(2);             mainframe.addkeylistener(this);              if ("true".equalsignorecase(args.get("fullscreen"))) {               device.setfullscreenwindow(mainframe);               device.setdisplaymode(new displaymode(640, 480, 8, displaymode.refresh_rate_unknown));             }              final boolean vsync = "true".equalsignorecase(args.get("vsync"));              // cache buffer strategy , create rectangle move             bufferstrategy bufferstrategy = mainframe.getbufferstrategy();              rect = new rectangle2d.float(0,100, 64,64);             rect2 = new rectangle2d.float(0,200, 32,32);             rect3 = new rectangle2d.float(500,300, 128,128);              // loop initialization             long beforetime, aftertime, timediff, sleeptime;             long oversleeptime = 0l;             int nodelays = 0;             long excess = 0l;             gamestarttime = system.nanotime();             //prevstatstime = gamestarttime;             beforetime = gamestarttime;              period = (1000l*nano_in_milli)/target_fps;  // rendering fps (nanosecs/targetfps)             system.out.println("fps: " + target_fps + ", vsync=" + vsync);             system.out.println("fps period: " + period);               // main loop             while(true) {                // **2) execute physics                updateworld(0);                                   // **1) execute drawing                graphics g = bufferstrategy.getdrawgraphics();                drawscreen(g);                g.dispose();                 // synchronise display hardware. note on                // windows vista method may cause screen flash.                // if bothers you, comment out.                if (vsync) toolkit.getdefaulttoolkit().sync();                 // flip buffer                if( !bufferstrategy.contentslost() )                    bufferstrategy.show();                 aftertime = system.nanotime();                currendertime = aftertime;                calculateframespersecond();                 timediff = aftertime - beforetime;                sleeptime = (period-timediff) - oversleeptime;                if (sleeptime > 0) { // time left in cycle                   //system.out.println("sleeptime: " + (sleeptime/nano_in_milli));                   try {                      thread.sleep(sleeptime/nano_in_milli);//nano->ms                   } catch(interruptedexception ex){}                   oversleeptime = (system.nanotime()-aftertime) - sleeptime;                } else { // sleeptime <= 0;                   system.out.println("rendering slow");                   // cycle took longer period                   excess -= sleeptime;                   // store excess time value                   oversleeptime = 0l;                   if (++nodelays >= no_delays_per_yield) {                      thread.yield();                      // give thread chance run                      nodelays = 0;                   }                }                 beforetime = system.nanotime();                 /* if rendering taking long,                   update game state without rendering                   it, ups nearer                   required frame rate. */                int skips = 0;                while((excess > period) && (skips < max_render_skips)) {                   // update state don’t render                   system.out.println("skip renderfps, run updatefps");                   excess -= period;                   updateworld(0);                   skips++;                }                rendersskipped += skips;             }         } catch (exception ex) {             ex.printstacktrace();         } {             device.setfullscreenwindow(null);         }     }      private void updateworld(long elapsedtime) {         // speed: 150 pixels per second         //double xmov = (140f/(nano_in_milli*1000)) * elapsedtime;         double posx = rect.getx() + (140f / target_fps);     if (posx > mainframe.getwidth())         posx = -rect.getwidth();         rect.setrect(posx, rect.gety(), rect.getwidth(), rect.getheight());          posx = rect2.getx() + (190f / target_fps);     if (posx > mainframe.getwidth())         posx = -rect2.getwidth();        rect2.setrect(posx, rect2.gety(), rect2.getwidth(), rect2.getheight());                   posx = rect3.getx() - (300f / target_fps);     if (posx < -rect3.getwidth())         posx = mainframe.getwidth();     rect3.setrect(posx, rect3.gety(), rect3.getwidth(), rect3.getheight());               }      private void drawscreen(graphics g) {         g.setcolor(color.black);         g.fillrect(0, 0, mainframe.getwidth(), mainframe.getheight());         g.setcolor(color.white);         g.drawstring("fps: " + fps, 40, 50);          g.setcolor(color.red);         g.fillrect((int)rect.getx(), (int)rect.gety(), (int)rect.getwidth(), (int)rect.getheight());          g.setcolor(color.green);         g.fillrect((int)rect2.getx(), (int)rect2.gety(), (int)rect2.getwidth(), (int)rect2.getheight());          g.setcolor(color.blue);         g.fillrect((int)rect3.getx(), (int)rect3.gety(), (int)rect3.getwidth(), (int)rect3.getheight());     }      private void calculateframespersecond() {         if( currendertime - lastfpstime >= nano_in_milli*1000 ) {             fps = framecounter;             framecounter = 0;             lastfpstime = currendertime;         }         framecounter++;     }      public void keypressed(keyevent e) {         if( e.getkeycode() == keyevent.vk_escape ) {             system.exit(0);         }     }      public void keyreleased(keyevent e) { }     public void keytyped(keyevent e) { }      public static void main(string[] args) {         try {         map<string,string> mapargs = parsearguments(args);              graphicsenvironment env = graphicsenvironment.getlocalgraphicsenvironment();             graphicsdevice device = env.getdefaultscreendevice();             new gameloop2(mapargs, device);         } catch (exception ex) {             ex.printstacktrace();         }     }       /**      * parse commandline arguments, each parameter name-value pair.      * example: java.exe myapp "key1=value1" "key2=value2"      */     private static map<string,string> parsearguments(string[] args) {         map<string,string> mapargs = new hashmap<string,string>();          for(int idx=0; idx < args.length; idx++) {             string val = args[idx];             int delimidx = val.indexof('=');             if (delimidx < 0) {                 mapargs.put(val, null);             } else if (delimidx == 0) {                 mapargs.put("", val.substring(1));             } else {                 mapargs.put(                     val.substring(0, delimidx).trim(),                     val.substring(delimidx+1)                 );             }         }          return mapargs;     }  } 

Comments

Popular posts from this blog