Я все еще изучаю Java, если кто-то может мне помочь, я буду очень счастлив!Как остановить авто-перерисовку() при изменении размера Jframe
Извините за плохой английский, я испанский! Я делаю игру с черепицей, в игре используется классический «игровой цикл», который закрывает двигатель со скоростью 60 кадров в секунду. Задержка цикла, а затем переадресация вызова(); Это прекрасно работает! Но ..
Проблема в том, что событие перерисовывания вызывается, когда размер JFrame изменяется или увеличивается! Например, когда JFrame максимизирован/изменен размер, рендеринг игры со скоростью 10000 кадров в секунду, но когда они не выполняются, игра отображается с установленной мной скоростью, поэтому есть способ отключить автоматическую перерисовку и заставить ее работать ТОЛЬКО, когда «component.repaint () "вызывается из моего кода?
Проблема здесь не в «игровом цикле», проблема в том, что перерисовка называется автоматическим при изменении размера/максимизации рендеринга игры на более 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....
, пожалуйста, добавьте код, который очень сложно помочь вам только с описанием. –
Итак, вы хотите изменить размер окна без вызова repaint()? – DreadHeadedDeveloper
да, это именно то, что я хочу, я хочу, чтобы игра работала со скоростью 60 кадров в секунду, но когда я изменяю размер, функция repaint() называется для запуска игры со скоростью 1000 кадров в секунду, например –