type
status
date
slug
summary
tags
category
icon
password
@ZZHow(ZZhow1024)
参考课程:
【韩顺平 循序渐进学Java】
本章 Project:
0568_坦克大战介绍
- 项目:坦克大战1.0
0569_Java坐标体系
- 坐标体系-介绍
坐标原点位于左上角,以像素为单位。在 Java 坐标系中,第一个是 x 坐标,表示当前位置为水平方向,距离坐标原点 x 个像素;第二个是 y 坐标,表示当前位置为垂直方向,距离坐标原点 y 个像素。
- 坐标体系-像素
- 重要的概念 ——— 像素
- 计算机在屏幕上显示的内容都是由屏幕上的每一个像素组成的。例如,计算机显示器的分辨率是 800 × 600,表示计算机屏幕上的每一行由 800 个点组成,共有 600 行,整个计算机屏幕共有 480000 个像素。像素是一个密度单位,而厘米是长度单位,两者无法比较
0570_绘图入门和机制
- 案例:绘制一个圆
- 绘图原理:
- Component 类提供了两个和绘图相关最重要的方法:
paint(Graphics g)
绘制组件的外观repaint()
刷新组件的外观- 当组件第一次在屏幕显示的时候,程序会自动的调用 paint() 方法来绘制组件
- 在以下情况 paint() 将会被调用:
- 窗口最小化,再最大化
- 口的大小发生变化
- repaint 方法被调用
案例演示:com.zzhow.draw 中的 DrawCircle.java
0571_绘图方法
- Graphics 类
- 画直线
drawLine(int x1, int y1, int x2, int y2);
- 画矩形边框
drawRect(int x, int y, int width, int height);
- 画椭圆边框
drawOval(int x, int y, int width, int height);
- 填充矩形
fillRect(int x, int y, int width, int height);
- 填充椭圆
fillOval(int x, int y, int width, int height);
- 画图片
drawlmage(Image img, int x, int y, ...);
- 画字符串
drawString(String str, int x, int y);
- 设置画笔的字体
setFont(Font font);
- 设置画笔的颜色
setColor(Color c);
Graphics 类可以理解成画笔,为我们提供了各种绘制图形的方法。
案例演示:com.zzhow.draw 中的 GraphicsMethod.java
0572_绘制坦克游戏区域
- 坦克部分:
- 父类:Tank.java
- 我方坦克:MyTank.java
- 游戏绘图区域:
- MyPanel.java
- 绘制灰色矩形
- 入口程序:
- TankGame01.java
0573_绘制坦克
- 绘制坦克封装到 drawTank 方法中
0574_小球移动案例
- 案例:让小球受到键盘控制,上下左右移动
案例演示:com.zzhow.event 中的 BallMove.java
0575_事件处理机制
- 基本说明
Java 事件处理是采取 “委派事件模型”。当事件发生时,产生事件的对象,会把此 “信息” 传递给 “事件的监听者” 处理,这里所说的 “信息” 实际上就是 java.awt.event 事件类库里某个类所创建的对象,把它称为 “事件的对象”。
- 示意图
- 事件处理机制深入理解
- 几个重要的概念:事件源、事件 和 事件监听器
- 事件源:一个产生事件的对象,比如按钮,窗口等
- 事件:承载事件源状态改变时的对象,比如当键盘事件、鼠标事件、窗口事件等等,会生成一个事件对象,该对象保存着当前事件很多信息,比如 KeyEvent 对象有被按下键的 Code 值。java.awt.event 包和 javax.swing.event 包中定义了各种事件类型
- 事件类型:
- 事件监听器接口:
- 当事件源产生一个事件,可以传送给事件监听者处理
- 事件监听者实际上就是一个类,该类实现了某个事件监听器接口,比如案例中的 MyPanel 就是一个类,它实现了 KeyListener 接口,它就可以作为一个事件监听者,对接受到的事件进行处理
- 事件监听器接口有多种,不同的事件监听器接口可以监听不同的事件,一个类可以实现多个监听接口
- 这些接口在 java.awt.event 包和 javax.swing.event 包中定义。
0576_绘制坦克上下左右
- 绘制坦克朝向上下左右时的情形
0577_坦克动起来
- Tank 类添加 direction 和 speed 属性
- Tank 类添加 moveUp()、moveDown()、moveLeft() 和 moveRight() 方法
0578_绘制敌人坦克
- 分析:
- 代码在 MyPanel.java
- 以单开一个 EnemyTank 类
- 敌人坦克数量多且需要考虑多线程问题,可以放入到集合 Vector 中