java-调整Jframe大小时如何停止auto-repaint()

我仍在学习Java,如果有人可以帮助我,我将非常高兴!

对不起,英语不好,我是西班牙人!
我正在制作一个方块游戏,该游戏使用了经典的“游戏循环”,将引擎的帧频限制为60fps
循环睡眠,然后调用repaint();
这样很好!但..

问题在于,当调整JFrame的大小或使其最大化时,将调用repaint事件!
例如,当JFrame最大化/调整大小时,游戏以10000fps的速度渲染,但如果没有,则以我设置的速度渲染游戏,因此有一种方法可以禁用“自动重绘”,并使其仅在“ 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....

解决方法:

so when the JFrame isn’t maximized

我不知道为什么这会引起问题,因为只应生成一个重画请求.

or (resizing)

我可以看到这是一个问题,因为将为您调整帧大小的每个像素调用重绘.在这种情况下,您可以使用:

Toolkit.getDefaultToolkit().setDynamicLayout(false); 

现在,将在调整大小后验证组件.

this.setBackground(new Color(210,247,255));

不要使用上述代码,因为更改背景会导致调用repaint(),这将再次调用paintComponent()方法.绘画方法仅用于绘画.

上一篇:java-在awt中更改按钮backgroundcolor


下一篇:使用java.awt.Robot类在applet中进行屏幕捕获时,java.security.AccessControlException