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();
}
}
}
绘制游戏背景图
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();
}
}
}
}
如此处理在一张图片过后会有另外一张图片接上,从而实现了无限滚动: