gpt4 book ai didi

java - Java中图像闪烁

转载 作者:行者123 更新时间:2023-12-02 06:36:28 25 4
gpt4 key购买 nike

我在使用 Java 编程的游戏中遇到问题。这是代码。

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class Game extends JFrame {
private static final long serialVersionUID = 1L;

Graphics dbg;
Image dbImage;
static Image block;
static Block block1 = new Block();
static Image player1;
static Player player = new Player(193, 143);

public Game() {
Image playerIcon = new ImageIcon("res/play.png").getImage();
setSize(500, 400);
setTitle("Game");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setIconImage(playerIcon);
setLocationRelativeTo(null);
setVisible(true);
addKeyListener(new InputHandler());
setBackground(Color.BLACK);
setResizable(false);
}

public static void main(String[] args) {
new Game();
Thread p = new Thread(player);
p.start();
}

@SuppressWarnings("static-access")
public void paint(Graphics g) {
try {
dbImage = ImageIO.read(new File("res/background.png"));
} catch (Exception e) {
e.printStackTrace();
}
try {
player1 = ImageIO.read(new File("res/play.png"));
} catch (Exception e) {
e.printStackTrace();
}
try {
block = ImageIO.read(new File("res/grass.png"));
} catch (Exception e) {
e.printStackTrace();
}
dbg = dbImage.getGraphics();
draw(dbg);
g.drawImage(dbImage, 0, 0, this);
g.drawImage(player1, player.x, player.y, this);
g.drawImage(block, block1.x, block1.y, this);
}

public void draw(Graphics g) {
repaint();
}
}

我只添加了这个类,因为这是我添加图像的地方。如果你想看其他类(class)请评论。问题是图像player1和 block 正在闪烁。

最佳答案

  1. 切勿在 EDT(事件调度程序线程)上执行文件 I/O。 paint(Graphics g) 方法由 EDT 上的 AWT/Swing 调用,因此您不应该在那里加载图像(正如 Zebby Dee 正确指出的那样)。在构造函数中初始化它们,或通过 SwingWorker 或类似的加载。

  2. 不要从 paint 调用 repaint,就像使用 draw 方法间接执行的那样。这将导致无限的重绘循环。如果您需要定期重新绘制游戏,请使用 Timer 或类似工具,定期从不同线程发布 repaint 请求。由于某种原因,您还将图像的 Graphics 对象传递给 draw 方法,但从不使用它。我不确定这样做的意图是什么。

这两个问题的结合导致了闪烁效果。

关于java - Java中图像闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19598428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com