一、实现欢迎界面和游戏背景图的滚动(雷霆战机)

GitHub地址:https://github.com/WingedCat/AirWar

欢迎界面效果:
一、实现欢迎界面和游戏背景图的滚动(雷霆战机)_第1张图片

//取得开始背景
    Image beginBg = GameImage.getImage("resources/startbg1.jpg");

    public void paint(Graphics g){
            g.drawImage(beginBg, 0, 0, null);
    }

正常情况下,刚刚进入游戏时来到欢迎界面,稍等片刻就开始游戏了。所有的图案都要在paint()中进行绘制,如果不进行处理,显然会一直出现欢迎界面。
修改代码:

//新增变量begin,标志这是刚刚开始游戏
boolean begin = true;
public void paint(Graphics g){
        if(begin){
            g.drawImage(beginBg, 0, 0, null);
            try {
                Thread.sleep(3000);
                begin = false;
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

这样开始的欢迎界面就会在显示3秒后消失:
一、实现欢迎界面和游戏背景图的滚动(雷霆战机)_第2张图片

绘制游戏背景图

static int yPos = -646;//如果设置为0,则图片最顶端在窗体上向下滚动就没有了
//yPos = 窗体的高度 - 图片的高度

//取得游戏背景
    Image gameBg = GameImage.getImage("resources/background1.bmp");
    public void paint(Graphics g){
        if(begin){
            g.drawImage(beginBg, 0, 0, null);
            try {
                Thread.sleep(3000);
                begin = false;
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        g.drawImage(gameBg, 0, yPos, null);
    }

虽然通过上面的代码实现了游戏背景的显示,但是背景是静态的,显示不出飞机在向前飞。
为了使图片进行滚动,我们应该修改yPos的值。

static class BgThread extends Thread{//创建BgThread类,专门用于改名yPos使背景图片滚动
        @Override
        public void run() {
            while(true){
                if(yPos==764){
                    yPos = -646;
                }else{
                    if(begin==false)//如果不进行判断,那么在开始界面时yPos就已经改变了,这显然不行
                        yPos += 2;
                }
                try {
                    Thread.sleep(50);//滚动速度的设定
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

好消息是我们实现了背景图的滚动,不好的是,当一张图片结束时就没有了。

解决方案是使用两张图片进行交替:
使用两个变量记录位置:

public static int yPos = -1*(gameBg.getHeight(null)-Constant.GAME_HEIGHT)+1;
    public static int yPos2 = yPos - gameBg.getHeight(null);
//在第一个图片后面紧接着画一张图片
g.drawImage(gameBg, 0, yPos, null);
g.drawImage(gameBg, 0, yPos2, null);//两张图片交替

完善BgThread内部类:

static class BgThread extends Thread{//创建BgThread类,专门用于改名yPos使背景图片滚动
        @Override
        public void run() {
            while(true){
                if(yPos>=Constant.GAME_HEIGHT){//交替
                    yPos = yPos2 -gameBg.getHeight(null);
                }else{
                    if(yPos2>=Constant.GAME_HEIGHT){//交替
                        yPos2 = yPos - gameBg.getHeight(null);
                    }else{
                        if(begin==false){//真正进入游戏才开始滚动
                            yPos += 2;
                            yPos2 +=2;
                        }
                    }
                }
                try {
                    Thread.sleep(50);//滚动速度的设定
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

如此处理在一张图片过后会有另外一张图片接上,从而实现了无限滚动:

你可能感兴趣的:(一、实现欢迎界面和游戏背景图的滚动(雷霆战机))