Java 如何在不必再次创建同一缓冲图像的情况下,将同一缓冲图像多次加载到面板上?

Java 如何在不必再次创建同一缓冲图像的情况下,将同一缓冲图像多次加载到面板上?,java,image,bufferedimage,Java,Image,Bufferedimage,如果这是我的形象: private BufferedImage LVL140; try { LVL140 = ImageIO.read(new File("SplendorIm/LVL140.png")); } catch (IOException e) { e.printStackTrace(); } g.drawImage(LVL140,1050,0,null); 如何在不必再次创建相同的缓冲图像的情况下,将相同的缓冲图像再次加载到面板上?加载图像后,使用而

如果这是我的形象:

private BufferedImage LVL140;

try

{        

LVL140 = ImageIO.read(new File("SplendorIm/LVL140.png"));

} catch (IOException e)

{

e.printStackTrace();

}

g.drawImage(LVL140,1050,0,null);

如何在不必再次创建相同的缓冲图像的情况下,将相同的缓冲图像再次加载到面板上?

加载图像后,使用
而{}
中带有
线程的Thread.sleep()
a
g.drawImage()

这里有一个例子:

公共类DrawSystem扩展JPanel实现可运行{
私人int宽度、高度;
专用缓冲图像img;
私有布尔运行;
私有图形2dg;
//这些行可以在配置中,但让我们在这里执行
私有无效整数FPS=60;
专用长目标时间=1000/FPS;
专用缓冲区映像LVL140;
公共绘图系统(尺寸){
宽度=(int)维度。getWidth();
高度=(int)维度。getHeight();
//这是您的L140级图像
LVL140=ImageIO.read(新文件(“SplendorIm/LVL140.png”);
}
//您只需使用(variable.start())启动thred;
@凌驾
公开募捐{
img=新的BuffereImage(宽度、高度、BuffereImage.TYPE\u INT\u RGB);
g=(Graphics2D)img.getGraphics();
运行=真;
长起点;
久违;
漫长的等待;
(跑步时){
start=System.nanoTime();
draw();
drawToScreen();
已用=System.nanoTime()-开始;
等待=targetTime-已用时间/1000000;
如果(等待>0){
试一试{
线程。睡眠(等待);
}捕获(例外e){
e、 printStackTrace();
}
}
}
}
//在“img”上画“LVL140”的像素。你可以画其他的东西而不影响“LVL140”,多亏了这个
私人提款(){
g、 drawImage(LVL140,0,0,空);
}
//在JPanel上绘制“img”的像素。
私有void drawToScreen(){
Graphics g2=getGraphics();
如果(g2!=null){
g2.绘图图像(img,0,0,宽度,高度,空);
g2.dispose();
}
}
}
请注意,您可以使用
addNotify()
,然后从那里启动线程,但不要让自己尴尬,这是java的第一步

只需创建一个
JFrame
,添加
绘图系统
,然后执行以下操作:

DrawSystem sys=新的DrawSystem(新尺寸(1000500));
.add(sys);
螺纹th=新螺纹(sys);
//调用'run()'方法
th.start();
如您所见,创建一次BuffereImage,然后在
draw()
方法中多次使用它。
我希望这会对您有所帮助。

但是我现在如何拖动缓冲图像呢?@SoccerHalo_King123有一个
私有缓冲图像LVL140
,我在构造函数中初始化它。您可以为此添加一个setter,并将LVL140设置为一个不同的BuffereImage,而
while
函数将自动更新它。这看起来如何?我有一个mutator。添加一个方法,如
public void setImage(buffereImage img){LVL140=img;}
(最好是复制,但您可以自己找到它…),然后用新图像调用此方法。。。