HI,
wir basteln in der Schule zur Zeit n kleines Game. Und da hab ich folgendes Problem. Ich hab in dem Spiel ne DialogBox. Das ich die nich jedesmal neu zeichnen muss speicher ich mir die in ne BufferedImage und zeichne dann die BufferedImage auf mein Frame. Bei meinem DesktopPC funzt das auch 1a, aber auf'm Laptop hab ich n DualCore und da flimmert das. Denk ma das es am DualCore liegt, denn wenn die die CPU-Zugehörigkeit auf CPU 0 setzt flimmerts (fast) nicht mehr. Wie bekomm ich das Flimmern jetzt weg, ohne jedesma den einen Prozessor abzuschalten?
hier noch der relevante Code:
is nich der ganze Code, aber es sollte deutlich werden was ich mach. wenn nich sagt bescheid was ihr noch braucht...
MfG Bergmann.
wir basteln in der Schule zur Zeit n kleines Game. Und da hab ich folgendes Problem. Ich hab in dem Spiel ne DialogBox. Das ich die nich jedesmal neu zeichnen muss speicher ich mir die in ne BufferedImage und zeichne dann die BufferedImage auf mein Frame. Bei meinem DesktopPC funzt das auch 1a, aber auf'm Laptop hab ich n DualCore und da flimmert das. Denk ma das es am DualCore liegt, denn wenn die die CPU-Zugehörigkeit auf CPU 0 setzt flimmerts (fast) nicht mehr. Wie bekomm ich das Flimmern jetzt weg, ohne jedesma den einen Prozessor abzuschalten?
hier noch der relevante Code:
Java:
/**legt den Text der dialogBox fest
* @param text Text der DialogBox*/
public void setText(String text){
text = Utils.readCharCode(text);
int width = this.width-borderWidth;
if (answer) width -= cursor.getWidth();
font.setTextBox(text, width);
activeLine = 0;
yOffset = 0;
drawImage();
}
/**rendert den ImageBuffer vor*/
public void drawImage(){
if (background == null ||
border[0] == null ||
border[1] == null ||
border[2] == null ||
imageBuffer == null) return;
Pen pen = new Pen();
pen.setGraphics(imageBuffer.getGraphics());
pen.reset();
pen.push();
pen.translate(borderWidth/2, borderWidth/2);
pen.drawImage(background);
pen.pop();
pen.push();
pen.translate(borderWidth,
borderWidth - activeLine*font.getHeight() - (int)Math.round(yOffset));
if (answer) pen.translate(cursor.getWidth(), 0);
font.drawTextBox(pen);
pen.pop();
pen.push();
pen.drawImage(border[0]);
pen.translate(border[0].getWidth(), 0);
pen.drawImage(border[1]);
pen.translate(border[1].getWidth(), 0);
pen.drawImage(border[2]);
pen.translate(0, border[2].getHeight());
pen.drawImage(border[3]);
pen.translate(0, border[3].getHeight());
pen.drawImage(border[4]);
pen.translate(-border[5].getWidth(), 0);
pen.drawImage(border[5]);
pen.translate(-border[6].getWidth(), 0);
pen.drawImage(border[6]);
pen.translate(0, -border[7].getHeight());
pen.drawImage(border[7]);
pen.pop();
if (answer){
pen.push();
pen.translate(borderWidth,
borderWidth + activeAnswer*font.getHeight());
pen.drawImage(cursor);
pen.pop();
}
}
/**Zeichnet die DialogBox
* @param pen Zeichenstift*/
public void draw(Pen pen){
if (!active) return;
pen.push();
pen.translate(0, Game.game.getHeight() - height);
pen.drawImage(imageBuffer);
pen.pop();
}
MfG Bergmann.