Как остановить авто-перерисовку () при изменении размера Jframe

Я все еще изучаю Java, если кто-то может мне помочь, я буду очень счастлив!

Извините за плохой английский, я испанский! Я делаю игру с плитками, в игре используется классический «игровой цикл», который загружает движок со скоростью 60 кадров в секунду. Цикл сна и затем вызывается repaint (); Это отлично работает! Но..

Проблема в том, что событие перерисовки вызывается, когда размер JFrame изменяется или увеличивается! Например, когда JFrame максимизирует / изменяет размер рендеринга игры со скоростью 10000 кадров в секунду, но когда они этого не делают, игра рендерится со скоростью, которую я установил, так что есть способ отключить автоматическое перерисовывание и заставить его работать ТОЛЬКО, когда "component.repaint () называется из моего кода?

Проблема здесь не в «игровом цикле», проблема в том, что перерисовка называется автоматической, когда изменение размера / максимизация рендеринга игры на большем количестве кадров в секунду!

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....

Ответы на вопрос(2)

Ваш ответ на вопрос