gpt4 book ai didi

java - Java 中的图像闪烁?

转载 作者:行者123 更新时间:2023-12-01 18:41:54 37 4
gpt4 key购买 nike

好的,我现在正在编写一个游戏来为 Ludum Dare SharkJam 做准备,并且我正在使用一种新的编程方法,因为我的上一种方法使我的电脑崩溃了,所以这个应该可以工作。嗯,它确实有效,而且也更好,但是我放入其中的图像会闪烁。这是整个主类(绘制图像的地方) 打包我.NoahCagle.watermaze;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;

import me.NoahCagle.watermaze.entity.EntityShark;
import me.NoahCagle.watermaze.entity.Player;
import me.NoahCagle.watermaze.input.Keys;
import me.NoahCagle.watermaze.map.Map;

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

Map map = new Map(0, 0);
Player player = new Player(50, 30);
static EntityShark shark = new EntityShark(400, 400);
public Image dbImage;

public Game() {
setSize(800, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
setTitle("Water Maze");
setResizable(false);
setBackground(Color.blue);
addKeyListener(new Keys());
}

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

public void paint(Graphics g) {
dbImage = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);
g.drawImage(dbImage, map.x, map.y, null);
g.drawImage(player.player, player.x, player.y, this);
g.drawImage(shark.shark, shark.x, shark.y, this);
repaint();
}


}

这段代码对我的作用是使图像正常工作,只是闪烁很多。谁能帮我解决我的问题吗?编辑:我觉得和我在paint方法中调用repaint方法的地方有关系,所以看那里。

最佳答案

问题和建议:

  • 一个问题是您直接在 JFrame 的 paint 方法中进行绘制,这会导致闪烁,因为您没有获得自动双缓冲。而是在 JPanel 的 paintComponent 方法中进行绘制,以利用 swing JComponent 附带的自动双缓冲功能。
  • 接下来,您将在 paint 中调用 repaint(),这是一种糟糕且无法控制的动画制作方式。使用 Swing Timer 代替动画循环。
  • 接下来,您将在 paint 方法中创建一个图像对象。任何减慢paint方法或paintComponent方法的方法都会减慢绘图和动画的响应速度。不要这样做。避免在这些方法中创建对象,而是使用paintComponent方法仅用于绘图。
  • 接下来,您不调用 super 方法。在 paintComponent 覆盖中调用 super.paintComponent(g)
  • 此外,每当重写方法时,请务必在其前面添加 @Override 注解,以便编译器会在您的方法签名错误时通知您。

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

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