I am still learning Java, if someone can help me I will be very happy!
Sorry for bad english, I am spanish! I am making a tile game, the game uses the classic "game loop" that cap the engine at 60fps The loop sleep and then call repaint(); This works fine! But..
The problem is that repaint event is called when the JFrame is resized or maximized! For example when the JFrame is maximized/resized the game render at 10000fps but when they dont, the game render at the speed I set, so there is a way to disable Automatic repaint and make it work ONLY when the "component.repaint()" is called from my code?
The problem here is not the "game loop", the problem is that the repaint is called automatic when resize/maximized rendering the game at more fps!
public class Handling {
static private int fps=0;
static private int fpsfinal=0;
static int frames = 60;
static int frames_skip = 1000 / frames;
static long ticknext = GetTickCount();
static long ticksleep = 0;
public static void Run() {
for(;;){
Main.getDevice().repaint();
fps++;
ticknext += frames_skip;
ticksleep = ticknext - GetTickCount();
if(ticksleep >= 0) {
try {
Thread.sleep(ticksleep);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static long GetTickCount(){
return System.currentTimeMillis();
}
public static int GetFPS(){
fpsfinal=fps;
fps=0;
return fpsfinal-2;
}
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.image.ImageObserver;
import javax.swing.*;
public class Game extends JPanel{
private static final long serialVersionUID = 1L;
static boolean dir=true;
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
int layout=Main.layout;
Graphics2D g2d = (Graphics2D) g;
g.setFont(Resources.GetFont(0));
Camera.UpdateCameraAxis();
Camera.DoCamera();
Cursor.MouseLoop();
if (layout==0){
this.setBackground(new Color(210,247,255));
for(int xx=Math.max( etc....