会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132440个问题
JAVA 全系列/第一阶段:JAVA 快速入门/控制语句、方法、递归算法 2746楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 2747楼
JAVA 全系列/第一阶段:JAVA 快速入门/数组和数据存储 2748楼

老师你好,为什么我的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 快速入门/飞机大战小项目训练 2750楼
JAVA 全系列/第一阶段:JAVA 快速入门/IDEA的使用和第一个java项目 2751楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 2752楼
JAVA 全系列/第一阶段:JAVA 快速入门/数组和数据存储 2753楼
JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 2758楼

老师,您好,这段代码为什么我赋值180,它的运行结果就是180呢?代码里面有年龄判断,您帮我看看

package File;
/**
 * 测试封装的使用
 * @author zhang - dell
 *
 */
class Person{
	//两个私有属性
	private String name;//姓名
	private int age;//年龄
	
	//Person无参构造方法
	public Person() {
		
	}
		/**
		 * 	set 和get的使用方法
		 * 
		 * set:是给属性赋值
		 * get:是获取属性值
		 */
	public Person(String name,int age) {//带参构造方法name和年龄
		this.name = name;//在构造方法中this指的的当前name的值
		//setAge(age);
		this.age = age;//构造方法中不能直接赋值,应该使用setAge方法
	}
	
	public void setName(String name) {//给属性赋值
		this.name = name;
	}
	
	public String getName() {//获取属性值
		return name;
	}
	
	public void setAge(int age) {//给属性赋值
		//在赋值之前先判断年龄是否合法
		if(age > 130 || age < 0) {//给属性赋值判断
			this.age = 18;//不合法赋默认值18
		}else {
			this.age = age;//合法才给属性age
		}
	}
	@Override
	public String toString() {//重写toString方法
		// TODO Auto-generated method stub
		return  "Person[Person"+name+",age="+age+"]";//返回字符串的内容
	}
	
	
}

public class Test02 {
	public static void main(String[] args) {
		Person p = new Person();
		p.setName("李四");
		p.setAge(-45);
		System.out.println(p);
		
		System.out.println("======================");
		
		p.setName("Lili");
		p.setAge(60);
		System.out.println(p);
		
		System.out.println("======================");
		
		Person p2 = new Person("李四",180);
		System.out.println(p2);
	}

}


运行结果:

blob.png

JAVA 全系列/第一阶段:JAVA 快速入门/面向对象详解和JVM底层内存分析 2759楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

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