में कई bufferedImages का उपयोग करके मैं जावा एप्लेट में एक गेम बना रहा हूं और मैं झटके को कम करने के लिए अपने कोड को अनुकूलित करने की कोशिश कर रहा हूं।जावा
मैं पहले से ही डबल बफरिंग को क्रियान्वित किया है, इसलिए मैं आदेश खेल की पृष्ठभूमि के तत्वों है कि परिवर्तन नहीं करते की एक तस्वीर स्टोर करने के लिए में एक और 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 में आदेश() विधि यह ठीक काम करता है, एक तरफ अस्थिर से है, लेकिन सभी को है, जब जब मैं इसे इस तरह विभाजित, प्रारंभिक DiffVars() में खींची गई छवियों में से कोई भी दिखाई नहीं देता है, लेकिन पाठ करता है। अगर कोई मदद कर सकता है तो इसकी सराहना की जाएगी।
मेरा अनुमान है: प्रश्न में छवियों समय initializeDiffVars चलाता द्वारा लोड नहीं किया है। लेकिन जब चित्रकला को फिर से हटा दिया जाता है तो वे चित्रित होते हैं क्योंकि वे जल्दी से लोड होते हैं। यह देखने के बिना मुश्किल है कि इन छवियों को कैसे लोड किया जाता है। –