遵循2015年11月發佈的指南,我已經逐字複製了他的代碼,但它仍然不適用於我。有東西被棄用?如何在java中使用BufferStrategy時避免黑線
我有3個緩衝區(稱它們1,2和3)。當2和3畫在屏幕上時,屏幕的頂部和左側會有黑線。這個相同的代碼適用於兩個緩衝區。
錯誤鏡頭:https://gfycat.com/gifs/detail/GraveCompetentArmyworm
package field;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.image.BufferStrategy;
public class Main extends JFrame{
private Canvas canvas=new Canvas();
public Main() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(0,0,1000,1000);
setLocationRelativeTo(null);
add(canvas);
setVisible(true);
canvas.createBufferStrategy(3);
BufferStrategy buffert = canvas.getBufferStrategy();
int p=0;
int ap=0;
while(p<1000) {
if (ap==100){
p++;
ap=0;
}
ap++;
buffert=canvas.getBufferStrategy();
Graphics g = buffert.getDrawGraphics();
super.paint(g);
g.setColor(Color.GREEN);
g.fillOval(p+100, 200, 50, 50);
buffert.show();
}
}
// public void paint(Graphics graphics) {
// super.paint(graphics);
// graphics.setColor(Color.RED);
// graphics.fillOval(100, 100, 100, 100);
//
// }
public static void main(String[] args){
new Main();
}
}
'super.paint(g);'將是第一個錯誤。你應該自己清除緩衝區 – MadProgrammer
讓我試着澄清一下。畫布是框架的一個孩子,它的位置被框架邊框所抵消,通過調用super.paint,您要求框架將自己繪製到圖形上,黑色條實際上是通常由窗口裝飾覆蓋的區域 – MadProgrammer
太棒了!我將super.paint(g)更改爲canvas.paint(g),它現在按預期工作。 –