昨天跳着看视频把飞翔小鸟做出来了,下面分享一下我的思路。
先放成品图
和上一篇飞机大战的思路相似:
1.先把窗体做出把背景图放在面板中
2.把游戏背景中地面移动实现
3.把柱子在面板中实现进场及移动
4.把小鸟放在面板中
5.鼠标监听控制小鸟飞行轨迹
6.写判断小鸟与柱子碰撞和与地面碰撞的方法
7.添加计分和游戏结束游戏开始的画面
上面步骤最难的是写判断碰撞的方法…
——————————————————————————————————————————
首先是窗体类:
public class GameFrame extends JFrame{
public static void main(String[] args) {
GameFrame frame=new GameFrame();
GamePanel panel =new GamePanel();
//显示窗体
frame.setVisible(true);
//向窗体内添加一块画板
frame.add(panel);
}
public GameFrame() {
setTitle("飞翔小鸟");// 设置标题
setSize(432, 644);//窗体尺寸
setLocationRelativeTo(null);// 相对于屏幕左上角居中
setResizable(false);// 设置不允许玩家拖动界面
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置Logo图标 img/0.png
setIconImage(ImageUtil.getImage("/img/0.png"));
}
}
这是一个获取图片字节流的工具类:
public class ImageUtil {
public static BufferedImage getImage(String path) {
try {
BufferedImage image = ImageIO.read(ImageUtil.class.getResource(path));
return image;
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
return null;
}
}
地面类:
public class Ground {
/*
* 定义地方的x,y坐标和宽高
*/
int x;
int y;
int w;
int h;
BufferedImage img;
//地面的构造器用来构建地面对象
public Ground() {
img=ImageUtil.getImage("/img/ground.png");
h=img.getHeight();
w=img.getWidth();
x=0;
y=644-h;
}
public void Move() {
//让地面能够一直往左边移动
if(x<=-(w-432)) {
x=25; //初始化x为25 刷新时没有明显的断层
}else {
x--;