Как остановить авто-перерисовку () при изменении размера 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....