Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JApplet双缓冲_Java_Image_Japplet_Doublebuffered - Fatal编程技术网

Java JApplet双缓冲

Java JApplet双缓冲,java,image,japplet,doublebuffered,Java,Image,Japplet,Doublebuffered,我的JApplet有一个问题,我使用它的全部原因是默认情况下,缓冲读取器已经存在于其中 所以我的程序将移动一个球,但它在不同的位置创建了许多不同的图片,就像它假设的那样,但我不知道以后如何删除它们。这就是它看起来的样子: 这是我的密码: private Image img; double bollx = 150, bolly = 690; double dy = 30, dx = 30; double x , y; int diameter = 23; int click = 0, varje

我的JApplet有一个问题,我使用它的全部原因是默认情况下,缓冲读取器已经存在于其中

所以我的程序将移动一个球,但它在不同的位置创建了许多不同的图片,就像它假设的那样,但我不知道以后如何删除它们。这就是它看起来的样子:

这是我的密码:

private Image img;
double bollx = 150, bolly = 690;
double dy = 30, dx = 30;
double x , y;
int diameter = 23;
int click = 0, varjeClick;
JPanel panel;
int yBounce = 0, xBounce = 0;

public void init(){
    setSize(1900, 900);
    panel = new JPanel();
    panel.setLocation(50, 50);
    panel.setSize(1800, 700);
    //panel.setLayout(null);
    panel.addMouseListener(this);
    panel.setBackground(Color.white);
    this.add(panel);
    img = getImage(getCodeBase(), "basketboll.png");        
}
public void start(){
    Thread t = new Thread(this);
    t.start();
}
public void paint(Graphics g){
    //super.paintComponents(g);

    g.drawImage(img, (int)bollx, (int)bolly, panel); 
}
public void flyttaBoll(){
    //om stilla eller inte
    if(click == 0){
        bollx = 150;
        bolly = 690;
    }
    else{
        gravity();
        bollx += dx*0.02;
        bolly += dy*0.02;
    }
    if(bollx >= (panel.getWidth() - diameter*2.2)){
        bollx = panel.getWidth() - diameter*2.200000001;
        dx *= -0.9 ; 
    }
    if(bollx <= 0 + diameter){
        bollx = diameter + 1;
        dx *= -0.9 ;
    }
    if(bolly >= panel.getHeight() - diameter*2.2){
        bolly = panel.getHeight() - diameter*2.200000001;
        dy *= -0.7;
        yBounce++;
        if(yBounce >= 130){
            click = 0;
            yBounce = 0;
            varjeClick = 0;
        }
    }
    if(bolly <= 0 + diameter){
        bolly = diameter + 1;
        dy *= -0.7;
    }
} 
public void gravity(){
    if(varjeClick <= 7){
        dy += 9.82;
    }
    else{
        dy -= 9.82;
    }
}
public void run() {
     while(true){
         flyttaBoll();
         repaint();
         try{Thread.sleep(8);}catch(Exception e){}
     }
}
public void mousePressed(MouseEvent e){
    PointerInfo a = MouseInfo.getPointerInfo();
    Point b = a.getLocation();
    x = b.getX() - diameter/2;
    y = b.getY() - diameter/2;
    dx = x - bollx;
    dy = y - bolly;
    flyttaBoll();

}
私有图像img;
双铃X=150,铃Y=690;
双dy=30,dx=30;
双x,y;
内径=23;
int click=0,varjeClick;
JPanel小组;
int yBounce=0,xBounce=0;
公共void init(){
设置大小(1900、900);
panel=新的JPanel();
面板设置位置(50,50);
面板设置尺寸(1800700);
//panel.setLayout(空);
panel.addMouseListener(本);
面板.立根背景(颜色.白色);
本条添加(面板);
img=getImage(getCodeBase(),“basketboll.png”);
}
公开作废开始(){
螺纹t=新螺纹(此);
t、 start();
}
公共空间涂料(图g){
//超级组件(g);
g、 drawImage(img,(内部)bollx,(内部)bolly,面板);
}
公共无效Flytaboll(){
//欧姆斯蒂拉埃勒酒店
如果(单击==0){
铃数=150;
波莉=690;
}
否则{
重力();
bollx+=dx*0.02;
bolly+=dy*0.02;
}
如果(bollx>=(panel.getWidth()-直径*2.2)){
bollx=面板.getWidth()-直径*2.200000001;
dx*=-0.9;
}
如果(bollx=panel.getHeight()-直径*2.2){
bolly=panel.getHeight()-直径*2.200000001;
dy*=-0.7;
yBounce++;
如果(Y盎司>=130){
单击=0;
yBounce=0;
varjeClick=0;
}
}

如果(bolly JApplet,像所有顶级容器一样,不是双缓冲的。相反,创建一个自定义JPanel并覆盖它的paintComponent方法,将所有逻辑放在这个类中,然后将小程序简单地用作自定义面板的容器。另外,您必须调用super.paint(g)(您的示例)或super,paintComponent(g)(我的注释),否则您将得到绘制人工制品和其他奇怪的消息。因此,小程序的大小由HTML标记定义