gpt4 book ai didi

java - 在 java 中使用多个 bufferedImages

转载 作者:搜寻专家 更新时间:2023-10-31 20:23:14 24 4
gpt4 key购买 nike

我正在用 Java 小程序制作游戏,我正在尝试优化我的代码以减少闪烁。

我已经实现了双缓冲,所以我正在尝试使用另一个 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() 中绘制的图像,但是文本确实如此。如果有人可以提供帮助,我们将不胜感激。

最佳答案

我会扩展 JApplet 并使用 JPanel,默认情况下它是双缓冲的,用于内容。如果您试图限制更新区域,您可以查看 getSubimage(),显示 here .

关于java - 在 java 中使用多个 bufferedImages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6222645/

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