java中bufferedimage_在java中使用几个bufferedImages

我在

java applet中制作游戏,我正在尝试优化我的代码以减少闪烁.

我已经实现了双缓冲,所以我试图使用另一个BufferedImage来存储游戏背景元素的图片,这些图片不会改变.这是我的代码的相关部分……

public class QuizApplet extends Applet

{

//The image I'm trying to use to store components of the game's gui that don't change within a game

private BufferedImage QBuffImg = new BufferedImage(700,550,2);

private Graphics2D QBuffG2 = QBuffImg.createGraphics();

//The image I use to double buffer

private final BufferedImage drawTo = new BufferedImage(700,550,2);

private final Graphics2D bufferG2 = drawTo.createGraphics();

public void paint(Graphics g)

{

bufferG2.drawImage(bg, 0, 0, this);

if(gamescreen == 1)

{

paintGameFrame(bufferG2);

g.drawImage(drawTo, 0, 0, this);

}

}

//This paints all of the elements of the gui that change with each question

private void paintGameFrame(Graphics2D g2)

{

g2.setColor(Color.BLACK);

g2.setFont(font1);

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);

g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);

//Drawing the non changing components

g2.drawImage(QBuffImg, 0, 0, this);

g2.drawImage(getImage(getCodeBase(),currentQ.getFigure().getImgLoc()),78,177,this);

printStringInBox(String.valueOf(Qnumber),font2, g2, 6,71,48, 113,true);

printStringInBox("Score: "+person.getScore(),font1,g2,10,8,210,55,false);

printStringInBox("Time: "+String.valueOf(qTimer),font1,g2,475,8,675,55,true);

printStringInBox(currentQ.getQuerry(),font1,g2,80,68,622,118,true);

printStringInBox(currentQ.getFigName(), font2, g2, 50, 425, 265, 470,true);

printStringInBox(pos1.getChoice().getText(), font2, g2, pos1.getX1()+20, pos1.getY1(), pos1.getX2()-20, pos1.getY2(),true);

printStringInBox(pos2.getChoice().getText(), font2, g2, pos2.getX1()+20, pos2.getY1(), pos2.getX2()-20, pos2.getY2(),true);

printStringInBox(pos3.getChoice().getText(), font2, g2, pos3.getX1()+20, pos3.getY1(), pos3.getX2()-20, pos3.getY2(),true);

printStringInBox(pos4.getChoice().getText(), font2, g2, pos4.getX1()+20, pos4.getY1(), pos4.getX2()-20, pos4.getY2(),true);

printStringInBox("Multiplier: x"+String.valueOf(Math.round((difflevel+.10*multiplier)*10)/10.0), font1, g2, 245, 496, 458, 550, true);

if(waiting)

{

g2.drawImage(right_wrongPic, lastChoicePos.getX1()-30,lastChoicePos.getY1()-12,this);

}

}

private void initializeDiffVars()

{

QBuffG2.setColor(Color.BLACK);

QBuffG2.setFont(font1);

QBuffG2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);

QBuffG2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);

QBuffG2.drawImage(frame, 24, 124, null);

QBuffG2.drawImage(framebg, 29, 130, null);

QBuffG2.drawImage(stick, (getWidth()/3)-2, -9, null);

QBuffG2.drawImage(stick, (2*getWidth()/3)-2, -9, null);

QBuffG2.drawImage(stick, getWidth()/3, getHeight()-54, null);

QBuffG2.drawImage(stick, (2*getWidth()/3)-2, getHeight()-54, null);

QBuffG2.drawImage(nameBG, 20, 430, null);

QBuffG2.drawImage(querrybg, 50,68,null);

QBuffG2.drawImage(querrybg, 50,68,null);

QBuffG2.drawImage(Qbg, pos1.getX1(), pos1.getY1(), null);

QBuffG2.drawImage(Qbg, pos2.getX1(), pos2.getY1(), null);

QBuffG2.drawImage(Qbg, pos3.getX1(), pos3.getY1(), null);

QBuffG2.drawImage(Qbg, pos4.getX1(), pos4.getY1(), null);

printStringInBox(person.getName(),font1,QBuffG2,243,8,451,55,true);

printStringInBox(String.valueOf(NUMQUESTIONS),font2, QBuffG2, 655,71,697,113, true);

printStringInBox("High Score: "+highScoreDisp, font1, QBuffG2, 5, 495, 227, 550, true);

printStringInBox("New Game",font1,QBuffG2,newGame.getX1(),newGame.getY1(),newGame.getX2(),newGame.getY2(),true);

repaint();

}

}

因此,当我在paintGameScreen()方法中拥有所有这些绘制命令时,它可以正常工作,除了闪烁,但是当我将它拆分为这样时,在initializeDiffVars()中绘制的图像都不显示,但文本会显示.如果有人可以提供帮助,将不胜感激.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值