570 likes | 729 Views
专题三 低级用户界面. 案例一 运动的小球. 回顾. MVC 设计模式 在 JavaME 开发中的应用 优点及缺点 学习 Form 类及 Item 子类 Item TextField ChoiceGroup Spacer ImageItem ) 掌握 Item 事件处理( ItemCommandListener/ItemStateListener ). 本章目标. 掌握 Canvas 类 屏幕绘制及重绘 事件处理 学习 Graphics 类 绘制几何图形 设置颜色 绘制文本 学习 Font 类. 工作任务 2-1.
E N D
专题三 低级用户界面 案例一 运动的小球
回顾 • MVC设计模式 • 在JavaME开发中的应用 • 优点及缺点 • 学习Form类及Item子类 • Item • TextField • ChoiceGroup • Spacer • ImageItem) • 掌握Item事件处理(ItemCommandListener/ItemStateListener)
本章目标 • 掌握Canvas类 • 屏幕绘制及重绘 • 事件处理 • 学习Graphics类 • 绘制几何图形 • 设置颜色 • 绘制文本 • 学习Font类
工作任务2-1 • 实现一个运动小球的游戏,具体要求如下: • 游戏包含一个开始菜单,包括“开始”和“退出”两个菜单项。用户选择“开始”菜单项,启动弹球游戏;选择“退出”菜单项,结束弹球游戏。 • 游戏开始后,屏幕上显示一个运动的小球,还包括一个“暂停”命令。当用户执行“暂停”命令(屏幕右下角)时,屏幕返回菜单选择界面 。
工作任务2-2 • 参考实现结果:
相关实践24-1 • 1.创建名为subject5的MIDlet Project,并在src源文件夹下创建BounceMIDlet类
相关实践24-2 • 2.创建封装小球特征的Ball类
相关实践24-3 • 3.创建继承Canvas类的菜单屏幕类MenuCanvas 屏幕绘制 Graphics类
相关实践24-4 • 为MenuCanvas添加属性: • 屏幕尺寸:canvasWidth(画布宽)、canvasHeight(画布高) • 矩形方框的坐标:recX(左上角x坐标)、recY(左上角y坐标) • 矩形方框的尺寸:menuWidth(菜单宽度)、menuHeight(菜单高度) • 每个填充菜单项的坐标:基于recX和recY计算获取 • 每个填充菜单项的尺寸:fillMenuWidth(填充菜单宽度)、fillMenuHeight(填充菜单高度) 减2是为了让显示效果有一点立体感
相关实践24-5 • 在构造方法中初始化上面的属性:
相关实践24-6 设置颜色 • 实现paint方法,在其中编写界面绘制的代码: 绘制矩形 绘制直线 设置字体 绘制文本
相关实践24-7 • 在BounceMIDlet类中创建MenuCanvas对象,然后设置为当前界面:
相关实践24-8 • 绘制选中菜单项:
相关实践24-9 • 4.实现选择菜单的操作: 按键事件处理 游戏动作
相关实践24-10 • 5.实现退出功能: • 为MenuCanvas类添加一个BounceMIDlet对象的引用,并重载构造方法
相关实践24-11 • 在BounceMIDlet类中添加一个exit方法:
相关实践24-12 • 修改MenuCanvas类,在keyPressed方法中增加一个处理“Fire”键被按下的case分支判断:
相关实践24-13 • 修改BounceMIDlet的构造方法: 调用MenuCanvas的带参构造
相关实践24-14 • 6.实现游戏主界面,创建BounceCanvas类
相关实践24-15 • 为BounceCanvas类添加下面的属性 值越大,小球的运动速度越快
相关实践24-16 • 为BounceCanvas添加构造方法,对属性进行初始化
相关实践24-17 • 实现BounceCanvas类的paint方法,在屏幕上绘制小球 绘制圆弧和扇面
相关实践24-18 • 在BounceMIDlet类中添加一个BounceCanvas界面引用,并提供一个开始游戏的play方法
相关实践24-19 • 为MenuCanvas的keyPresssed方法添加判断按下“开始”菜单项的case分支
相关实践24-20 • 绘制动态小球 • 修改BounceCanvas类,让它实现Runnable接口,成为线程运行的目标类:
相关实践24-21 • 修改BounceMIDlet类的play方法,添加启动线程的代码
相关实践24-22 • 实现“暂停”游戏的操作-1 • 在BounceCanvas中添加一个pause方法,将线程执行的标识修改为false
相关实践24-23 • 实现“暂停”游戏的操作-2 • 实现BounceMIDlet的pauseApp方法,在其中执行释放资源和切换界面的操作:
相关实践24-24 • 实现“暂停”游戏的操作-3 • 实现BounceCanvas类的commandAction方法,处理执行“暂停”命令的操作
总结-1 • 掌握Canvas类 • 屏幕绘制 • paint方法 • 重绘 • repaint方法 • 事件处理 • 键盘按键事件 • 游戏动作
总结-2 • 学习Graphics类 • 绘制几何图形 • 绘制直线 • 绘制矩形 • 绘制圆弧和扇面 • 设置颜色 • 绘制文本 • 学习Font类
Canvas-1 • Canvas • “画布”类,是Displayable的子类 • 提供了一系列屏幕绘制以及处理低级界面事件的方法 • 是一个抽象类,它包含一个paint抽象方法,必须创建该类的子类
Canvas-2 • Canvas类的常用方法 • 界面设置及设备信息相关 • setFullScreenMode/isDoubleBuffered/hasPointerEvents/hasPointerMotionEvents/hasRepeatEvents • 屏幕绘制相关 • paint/repaint/serviceRepaints • 事件处理相关 • hideNotify/showNotify/sizeChanged • keyPressed/keyReleased/keyRepeated/getKeyName/getKeyCode/getGameAction • pointerDragged/pointerPressed/pointerReleased
Canvas-2 • 创建Canvas子类
Canvas-3 • Canvas的两种显示方式 • 正常模式(默认) • setFullScreenMode(false) • 全屏模式 • setFullScreenMode(true) 在全屏模式下,Canvas的标题、Ticker将自动被隐藏,Command命令也无法使用。
屏幕绘制-1 • paint方法 • protected abstract paint(Graphics g) • 子类应实现paint方法 • 不建议在应用程序中直接调用 • repaint方法 • 调用该方法将引起paint方法的执行 • public final void repaint():重绘整个屏幕 • public final void repaint(int x,int y,int width,int height):重绘屏幕的指定区域 • repaint方法不能被子类重写
Graphics-1 • Graphics类 • 主要提供了基本的绘制功能 • 几何图形:包括直线、(圆角)矩形、弧形、填充三角形等 • 文本:字符或字符串 • 图像:绘制可变图像或不可变图像 • 设置绘图环境 • 设置颜色 • 设置字体
Graphics-2 • 获取Graphics类的对象 • 通过paint方法的参数 • Graphics对象主要用于在屏幕上绘制图形 • 利用Image类的getGraphics方法 • 一般用于绘制后台缓冲
设置颜色-1 • 颜色表示 • Graphics类中提供了一个24位的颜色模型,分别使用三个8位二进制表示红(R)、绿(G)、蓝(B)三种颜色 • public void setColor(int red,int green,int blue):每个参数的范围是0-255 • public viod setColor(int RGB):参数使用一个十六进制的整数,该整数的形式为“0xAARRGGBB” • 后24位(RRGGBB)代表红、绿、蓝三种颜色 • 前八位(AA)则代表了Alpha透明度值,该值在颜色模型中被忽略 • Graphics的默认颜色为黑色,颜色值是0
设置颜色-2 后面设置的颜色会替代之前设定的颜色
绘制矩形-1 • Graphics类的drawRect方法用来绘制矩形,fillRect方法用来绘制填充矩形: • drawRect(int x,int y,int width,int height) • fillRect(int x,int y,int width,int height) • x:矩形左上角横坐标 • y:矩形左上角纵坐标 • width:矩形宽度 • height:矩形高度
绘制圆弧和扇面-1 • Graphics类提供了用于绘制圆弧和扇面的drawArc和fillArc方法: • public drawArc(int x,int y, int width,int height,int startAngle,int arcAngle) • public fillArc(int x,int y,int width,int height,int startAngle,int arcAngle) • x:圆弧所在矩形区左上角的横坐标 • y:圆弧所在矩形区左上角的纵坐标 • width:圆弧所在矩形区的宽 • height:圆弧所在矩形区的高 • startAngle:以圆弧所在矩形的中心为圆心,时钟3点的方向为0度角,逆时针旋转的角度 • arcAngle:以startAngle为起始角度,逆时针旋转的角度
绘制直线 • 可以调用Graphics类的drawLine方法在屏幕上绘制一条直线: • public void drawLine(int x1,int y1,int x2,int y2) • (x1,y1)和(x2,y2)分别代表直线两个端点的坐标值
设置字体-1 • Font类-1 • Font类封装了字体的属性信息。 • 属性主要分为三种:字型、外观和字号,属性及属性值由Font类中定义的常量表示: • 字型属性: • STYLE_PLAIN:0,表示“普通” • STYLE_BOLD:1,表示“粗体” • STYLE_ITALIC:2,表示“斜体” • STYLE_UNDERLINED:4,表示“下划线”
设置字体-2 • Font类-2 • 外观属性: • FACE_SYSTEM:0,表示“系统字体” • FACE_MONOSPACE:1,表示“等宽字体” • FACE_PROPORTIONAL:64,表示“均衡字体” • 字号属性: • SIZE_MEDIUM:0,表示“中号” • SIZE_SMALL:8,表示“小号” • SIZE_LARGE:16,表示“大号” • 字体属性之间可以利用“|”操作符组成位运算表达式 • Font.FACE_MONOSPACE | Font.STYLE_UNDERLINED | Font.SIZE_LARGE
设置字体-3 • 字体属性组合规则 • 外观属性之间不能组合,例如FACE_SYSTEM | FACE_MONOSPACE是非法的 • 字号属性之间不能组合,例如SIZE_SMALL | SIZE_LARGE是非法的 • 字型属性中SYTLE_PLAIN不能与其他字型组合使用,因为它的值是0。而其他三种字型可以随意组合使用
设置字体-4 • 创建字体的方式 • 无法通过构造方法创建Font类的对象 • 利用Font类提供的三个静态方法获取Font对象的引用 • public static Font getDefaultFont() • public static Font getFont(int face,int style,int size) • public static Font getFont(int fontSpecifier)