Flying Birds' blog 2ed

2021年07月13日 99 字


Birdgame类

关于实践周的第一个项目选择了制作Flying Birds小游戏,首先会考虑到最直观的界面设计。
其中主要运用swing和awt包:图形界面工具,绘制出游戏场景。
主要设计对象包括游戏开始界面,游戏分数统计,游戏结束界面。

整个Birdgame类继承JPanel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class BirdGame extends JPanel {
...
...
}
JPanel中常用方法
void add(Component):添加组件。
void add(Component,int):添加组件至索引指定位置。
void add(Component,Object):按照指定布局限制添加组件。
void add(Component,Object,int):按照指定布局管理器限制添加组件到指定位置。
void remove(Component):移除组件。
void remove(int):移除指定位置的组件。
void removeAll():移除所有组件。
void paintComponent(Graphics):绘制组件。``
void repaint():重新绘制。
void setPreferredSize(Dimension):设置组件尺寸。
Dimension getPreferredSize():获取最佳尺寸。

组件是构成应用程序界面的基本元素,按钮、文本框、进度条等,都是组件。可视化组件又可以分为容器组件和非容器组件,可以在JPanel中放置按钮、文本框等非容器组件,甚至可以在JPanel中再放置若干个JPanel组件,顶层容器也是容器组件,每一个窗口应用程序中有且只能有一个顶层容器组件。
经常使用JPanel先创建一个面板,在向这个面板添加组件,然后把这个面板添加到其他容器中。
JPanel面板的默认布局是FlowLayout布局**
More info: JFrame,JPanel,JLabel详解

Graphics2D类基本使用

1
2
3
4
//绘制小鸟
Graphics2D g2=(Graphics2D) g;
g2.rotate(-bird.alpha,bird.x,bird.y);//rotate(double arc,double x, double y):图形以点(x,y)为轴点,旋转arc弧度。
g2.rotate(bird.alpha,bird.x,bird.y);//rotate(double arc,double x, double y):图形以点(x,y)为轴点,旋转arc弧度。

Java语言在Graphics类提供绘制各种基本的几何图形的基础上,扩展Graphics类提供一个Graphics2D类,它拥用更强大的二维图形处理能力,提供、坐标转换、颜色管理以及文字布局等更精确的控制。
Graphics2D定义了几种方法,用于添加或改变图形的状态属性。可以通过设定和修改状态属性,指定画笔宽度和画笔的连接方式;设定平移、旋转、缩放或修剪变换图形;以及设定填充图形的颜色和图案等。图形状态属性用特定的对象存储。
More info: Graphics2D类基本使用

与鼠标互动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
不断重复和绘制
MouseListener l=new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
try {
switch(state) {
case START:
//在开始前按下鼠标转为运行状态
state=RUNNING;
break;
case RUNNING:
//在运行状态,按下鼠标小鸟向上飞行
bird.flappy();
break;
case GAME_OVER:
//在结束状态,按下鼠标重置数据变为开始
column1=new Column(1);
column2=new Column(2);
bird=new Bird();
score=0;
state=START;
break;
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}

};
addMouseListener(l);

java中 addMouseListener()方法用于接收组件上“感兴趣”的鼠标事件(按下、释放、单击、进入或离开)的侦听器接口。(要跟踪鼠标移动和鼠标拖动,请使用 MouseMotionListener。)
MouseListener与MouseAdapter的区别在于一个是类,一个是接口。
适配器已经实现了相应的接口,例如MouseAdapter类实现了MouseListener接口,因此可以使用MouseAdapter的子类创建的对象做监视器,只需重写需要的接口方法即可。

启动方法

1
2
3
4
5
6
7
8
9
10
11
12
13

public static void main(String[] args) throws Exception
{

JFrame frame=new JFrame();
BirdGame game=new BirdGame();
frame.add(game);
frame.setSize(440,670);
frame.setLocationRelativeTo(null);//设置窗口相对于指定组件的位置。如果组件当前未显示或者 为 null,则此窗口将置于屏幕的中央
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//如果在代码里没加这个方法,那么在点击框架的”叉叉“退出框架后,程序仍然没有退出,只是JFrame被关闭了。
frame.setVisible(true);
game.action();
}

关于Java的setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) 这个方法是JFrame类的一个方法,EXIT_ON_CLOSE是JFrame的一个静态常量。
该方法的翻译大概是“设置默认的关闭操作,参数”在关闭动作时退出“。

Welcome back AM1ng!

本文作者: AM1ngkk
本文链接: https://am1ngkk.github.io/2021/07/13/blog2ed/