一、实现欢迎界面和游戏背景图的滚动(雷霆战机)
2017-11-24 13:13
405 查看
GitHub地址:https://github.com/WingedCat/AirWar
欢迎界面效果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/13/56f437491d3d80c35c03ecadac6db9f2)
正常情况下,刚刚进入游戏时来到欢迎界面,稍等片刻就开始游戏了。所有的图案都要在paint()中进行绘制,如果不进行处理,显然会一直出现欢迎界面。
修改代码:
这样开始的欢迎界面就会在显示3秒后消失:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/13/89c36e7873d4ca7f16ada4fab35b9c52)
绘制游戏背景图
虽然通过上面的代码实现了游戏背景的显示,但是背景是静态的,显示不出飞机在向前飞。
为了使图片进行滚动,我们应该修改yPos的值。
好消息是我们实现了背景图的滚动,不好的是,当一张图片结束时就没有了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/13/0dc41c9a1cbdf4e6ade59f9b0f739a58)
解决方案是使用两张图片进行交替:
使用两个变量记录位置:
完善BgThread内部类:
如此处理在一张图片过后会有另外一张图片接上,从而实现了无限滚动:
欢迎界面效果:
//取得开始背景 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(); } } } }
如此处理在一张图片过后会有另外一张图片接上,从而实现了无限滚动:
相关文章推荐
- [cocos2d-x][游戏开发]通过cocos2d-x实现简易飞机大战 03.游戏界面 背景层实现滚动
- 《MFC游戏开发》笔记七 游戏特效的实现(一):背景滚动
- Flash游戏背景的循环滚动实现
- Android开发:巧用延迟实现欢迎界面 及 摄像头预览后绘制背景标示(如坐标系、矩形框)
- 《MFC游戏开发》笔记七 游戏特效的实现(一):背景滚动
- cocos2d中分步实现飞机大战----游戏场景中背景的滚动
- 《MFC游戏开发》笔记七 游戏特效的实现(一):背景滚动
- 小小打灰机——1-制作游戏首界面和滚动背景
- 一款启动界面加加上滚动背景的 打飞机游戏
- 《MFC游戏开发》笔记七 游戏特效的实现(一):背景滚动
- 【unity3d学习笔记】Shader-通过Shader实现2D游戏中无限滚动的背景Shader
- 《MFC游戏开发》笔记七 游戏特效的实现(一):背景滚动
- 【Android游戏开发之五】游戏注册界面Demo-实现两个Activity之间的切换与数据交互!
- HTML5 Canvas 视差滚动背景的OOP实现
- J2ME中用Timer和TimerTask实现欢迎界面
- [cocos2d-x][游戏开发]通过cocos2d-x实现简易飞机大战 08.游戏界面 碰撞检测
- 【Android UI设计与开发】第02期:引导界面(二)使用ViewPager实现欢迎引导页面
- Swift游戏实战-跑酷熊猫 10 视差滚动背景
- 在J2ME中实现欢迎界面(附源代码)
- Activity实现欢迎界面