会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132358个问题
JAVA 全系列/第一阶段:JAVA 快速入门/变量、数据类型、运算符 3736楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 3739楼

老师你好,为什么我的gameframe加上双缓冲的代码之后,运行起来飞机不见了,只显示背景图案。

不加双缓冲的时候除了闪烁问题其他的都正常。

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class MyGameFrame extends Frame {
    Image bg=GameUtil.getImage("images/bg.jpg");
    Image plane=GameUtil.getImage("images/plane.png");
    int count=0;
    int planex=100;

    @Override
    public void paint(Graphics g) {  //paint不需要在main方法调用,自动运行
        System.out.println("重画次数"+count );
        count++;
        g.drawImage(plane,planex,100,22,33,null);//飞机位置大小
        g.drawImage(bg,0,0,600,600,null);//背景位置大小
        planex+=1;//飞机位移
    }

    public void langFrame(){
        setTitle("planeWar");
        setSize(Constant.width,Constant.height);
        setLocation(400,50);
        setVisible(true);
        this.addWindowListener(new WindowAdapter() { //增加关闭窗口监听,这样用户可以点击右上角关闭图标,可以关闭游戏程序
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        new paintThread().start();  //启动重画窗口的线程
    }
    class paintThread extends Thread{//重画方法
        @Override
        public void run() {
            while (true){
               repaint();//内部类可以调用外部类的方法
                try {
                    Thread.sleep(50);//1s=1000ms.相当于一秒重画20次
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    //双缓冲
    private Image offScreenImage = null;

    public void update(Graphics g) {
        if(offScreenImage == null)
            offScreenImage = this.createImage(500,500);//这是游戏窗口的宽度和高度

        Graphics gOff = offScreenImage.getGraphics();
        paint(gOff);
        g.drawImage(offScreenImage, 0, 0, null);
    }
    public static void main(String[] args) {
        MyGameFrame gf=new MyGameFrame();
        gf.langFrame();//调用langFrame方法
    }

}


JAVA 全系列/第一阶段:JAVA 快速入门/飞机大战小项目训练 3740楼
JAVA 全系列/第一阶段:JAVA 快速入门/JAVA入门和背景知识 3741楼
JAVA 全系列/第一阶段:JAVA 快速入门/JAVA入门和背景知识 3742楼
JAVA 全系列/第一阶段:JAVA 快速入门/IDEA的使用和第一个java项目 3743楼
JAVA 全系列/第一阶段:JAVA 快速入门/数组和数据存储 3744楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 3745楼
JAVA 全系列/第一阶段:JAVA 快速入门/飞机大战小项目训练 3746楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 3747楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 3748楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 3749楼
JAVA 全系列/第一阶段:JAVA 快速入门/JAVA入门和背景知识 3750楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637