После загрузки изображения используйте while {}
с Thread.sleep()
и g.drawImage()
внутри него.
Вот пример:
public class DrawSystem extends JPanel implements Runnable {
private int width, height;
private BufferedImage img;
private boolean running;
private Graphics2D g;
//Theses lines could be in a configuration, but let's do it here
private void int FPS = 60;
private long targetTime = 1000 / FPS;
private BufferedImage LVL140;
public DrawSystem(Dimension dimensions) {
width = (int) dimensions.getWidth();
height = (int) dimensions.getHeight();
//here's your LVL140 image
LVL140 = ImageIO.read(new File("SplendorIm/LVL140.png"));
}
//you just have to start the thred with (variable).start();
@Override
public void run() {
img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
g = (Graphics2D) img.getGraphics();
running = true;
long start;
long elapsed;
long wait;
while(running) {
start = System.nanoTime();
draw();
drawToScreen();
elapsed = System.nanoTime() - start;
wait = targetTime - elapsed / 1000000;
if(wait > 0) {
try{
Thread.sleep(wait);
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
//Draw pixels of "LVL140" on "img". You can draw others things without impact "LVL140" thanks to this
private void draw() {
g.drawImage(LVL140, 0, 0, null);
}
//draw pixels of "img" on the JPanel.
private void drawToScreen() {
Graphics g2 = getGraphics();
if(g2 != null) {
g2.drawImage(img, 0, 0, width, height, null);
g2.dispose();
}
}
}
Обратите внимание, что вы можете использовать addNotify()
, а затем запустить Thread оттуда, но не смущайте себя, это ваши первые шаги в Java.
Juste создайте JFrame
, добавьте DrawSystem
и сделайте:
DrawSystem sys = new DrawSystem(new Dimension(1000, 500));
<(your JFrame)>.add(sys);
Thread th = new Thread(sys);
//call the `run()` method
th.start();
Как видите, вы создаете свой BufferedImage один раз, а затем используете его несколько раз в методе draw()
.
Я надеюсь, что это поможет вам.