gpt4 book ai didi

java - drawImage 未绘制

转载 作者:行者123 更新时间:2023-12-01 14:57:38 25 4
gpt4 key购买 nike

这基本上就是我的代码的工作方式

class Main extends JFrame implements Runnable {

public Main() {
//init everything
}

public void start() {
running = true;
Thread thread = new Thread(this);
thread.start();
}

public void run() {
while(running) {
render();
}
}

public void render() {
Image dbImage = createImage(width, height);
Graphics dbg = dbImage.getGraphics();
draw(dbg);
Graphics g = getGraphics();
g.drawImage(dbImage, 0, 0, this);
g.dispose();
}

public void draw(Graphics g) {
for(int y=0; y < map.length; y++) {
for(int x=0; x < map.length; x++) {
g.drawImage(map.map[x + y* map.MAP_DIM], x*MAP_DIM, y*MAP_DIM, this);
}
}
}

public static void main(String... args) {
Main main = new Main();
main.start();
}
}

但什么也没画出来,我看到的都是灰色的。有人知道问题是什么吗?我尝试在draw()方法的末尾执行repaint(),但仍然没有任何结果。

最佳答案

您不应该使用 Java 中的 Swing 自行管理绘图。

您必须让EDT线程通过自己的线程调用适当的重绘方法。这是通过调用 JComponentpaint(Graphics g) 来完成的。现在您不应该重写该方法,而应该重写 paintComponent(Graphics g)

因此,您应该将绘制方法从线程移动到适当的绘制方法:

public void run() {
while (running)
repaint();
}

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

请注意,您应该以固定的帧速率调用重绘并使用双缓冲以避免闪烁。

一个更简单的解决方案是嵌入已经为此类工作准备好的东西,例如 Processing框架,效果非常好。

关于java - drawImage 未绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14150140/

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