Java实现飞机大战小游戏(一)

day1 创建游戏窗口

1.设置背景图片

BaseFrame类

public class BaseFrame extends JFrame{}
设置窗体宽度和高度
public static int frameWidth = 512;   //游戏界面宽度
public static int frameHeight = 728;  //游戏界面高度
设置窗体的大小和位置

要把游戏窗口放到正中间,首先获取屏幕分辨率。

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

接着设置大小和位置。

setBounds(((int)screenSize.getWidth()-frameWidth)/2,0,frameWidth,frameHeight);

设置布局方式。

setLayout(null);

我们将背景图片放在JPane容器上,再将JPanel容器加在窗体上。

//创建一个MyPanel对象
this.myPanel = new MyPanel();
//设置myPanel对象的位置大小
this.myPanel.setBounds(0, 0, frameWidth, frameHeight);
//将mypanel组件添加到窗口中
this.add(this.myPanel);
//显示窗口
setVisible(true);
//设置窗口的关闭行为
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

MyPanel类

将背景图片放到Panel容器中

//存放背景图片
public Image bgImage;
	
public MyPanel(){
    this.bgImage = Toolkit.getDefaultToolkit().getImage("images/bg01.jpg");
}	
//绘制组件
public void paintComponent(Graphics g){
    super.paintComponent(g);	
    //绘制背景图
    g.drawImage(this.bgImage, 0, 0-this.bgImage.getHeight(this), this.bgImage.getWidth(this), this.bgImage.getHeight(this),null);
    g.drawImage(this.bgImage, 0, 0, this.bgImage.getWidth(this), this.bgImage.getHeight(this),null);
}

Main类

启动窗口界面

new BaseFrame();

运行效果

Java实现飞机大战小游戏(一)_第1张图片

2.让背景图片滚动起来

​ 我们前面已经实现将两张相同的背景图片上下拼接起来,两张图片的坐标分别是(0,0 - 背景图片高度)和(0,0)。若要让背景图片滚动起来,我们需要设置一个不断变化的图片高度值top,使得两张背景图片的高度不断发生变化。所以改变两张背景图片的坐标为(0,top - 背景图片高度)、(0,top)。

​ 图片滚动需要不断描绘画板,这里用线程实现。

DrawableThread类

public MyPanel myPanel;
//需要对放着背景图片的JPanel容器进行操作
public DrawableThread(MyPanel myPanel){
    this.myPanel = myPanel;
}
public void run(){
    while(true){
        this.myPanel.repaint();   //重绘会调用myPanel的paintComponent方法
			
        try {
            this.currentThread().sleep(1);//每1毫秒运行一次
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

MyPanel类

对MyPanel类进行修改

//计时器
public int timer = 0;
//图片原始高度
public int top = 0;
//线程
public DrawableThread drawableThread; 

修改构造函数

public MyPanel(){
    //创建线程  重绘JPanel
    this.drawableThread = new DrawableThread(this);
    //启动线程
    this.drawableThread.start();
}

修改paintComponent函数

//绘制背景图
g.drawImage(this.bgImage, 0, top-this.bgImage.getHeight(this), this.bgImage.getWidth(this), this.bgImage.getHeight(this),null);

g.drawImage(this.bgImage, 0, top, this.bgImage.getWidth(this), this.bgImage.getHeight(this),null);
		
timer++;
//防止timer数据过大溢出
if(timer==10000){
    timer = 0;
}
//每隔十毫秒,图片向下滚动
if(timer%10==0){
	top++;
	if(top>=this.bgImage.getHeight(this))
		top = 0;
}

运行效果

你可能感兴趣的:(JAVA,Java项目)