您的位置:首页 > 产品设计 > UI/UE

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

2017-11-24 13:13 405 查看
GitHub地址:https://github.com/WingedCat/AirWar

欢迎界面效果:



//取得开始背景
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秒后消失:



绘制游戏背景图

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();
}
}
}
}


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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java gui 雷霆战机