1、学习情景2 手机游戏“迷失森林”设计和开发,学习任务1,手机游戏系统的界面设计与开发,学习单元一 手机游戏设计,学习目标: 手机游戏特征 Java开发手机游戏的优势和缺点 总体设计 概要设计 重点和难点: 总体设计 概要设计,应具备的职业能力: 了解手机游戏设计的组成部分 游戏界面设计 游戏逻辑设计 记录管理系统 手机游戏系统分析 项目功能需求分析 技术支持和产品定位 项目概要设计 游戏策划 手机游戏的剧本编写,手机游戏特征,一个成功的手机游戏大多具有以下特征: 易于学习; 可中断性; 丰富的社会交互; 利用手机技术的优点; 无违法内容。 手机游戏可行性分析: 范围性; 随意性; 娱乐性。,传
2、统手机存在以下弊端,传统手机出厂时均由硬件厂商固化程序,程序不能增加、删除,有了错误也不能更新、修改,若要增加新功能必须另换一部手机。 传统手机访问互联网是通过WAP(Wireless Application Protocal),所有网络资源必须接通网络才能在线访问,非常耗时、费用亦很高。,Java的优势,应用程序可按需下载,而不是购买由硬件商提供的套件,可升级空间大。 Java技术提供了一个类库,它使的应用开发商可以创建更为直觉、丰富的用户界面(GUI); Java技术使网络带宽的应用更为有效,因为应用程序可以下载到器件上,并在本地运行,仅仅是在连接到服务器时才会占用网络带宽。,Java的缺
3、点,Java是基于虚拟机的半解释型编译系统,其执行效率较C+等完全编译后的程序会低很多,程序如果不进行精简和优化,将可能导致运行的不流畅。开发过程中需要进行结构上的控制、变量的合理使用、算法的优化。,游戏策划,在设计一个游戏之前,一定要先作个调研,看看这类游戏的适用对象、投资规模和市场等因素。对于一般的手机游戏在开发之前要搞清楚以下问题: 剧本编写 规则设计 关卡设计,游戏策划,逻辑功能,外部图形导入; 场景、元素绘制; 层次显示; 人物移动; 元素碰撞处理:元素的显示与消除; 胜利、失败判断; 时间计算系统; 数据更新。,概要设计 界面模块,在界面模块中,有两个类,分别是:MissFores
4、t类和MenuScreen类。在MissForest类中,有四个元素,分别是: 场景display 按钮command 信息框Alert 画布MenuScreen,概要设计 界面模块,概要设计 逻辑模块,在逻辑模块中使用的关键性逻辑编码如下: 图形的导入:Image.createImage 人物的行走:keyStates 地图的绘制:Tiledlayer 事件的判断:If or and 数据的连接:RecordStore 层次的显示:layerManager,概要设计 逻辑模块,概要设计 RMS模块,在RMS模块中使用了RecordStore类,其中使用的方法有: addRecord(); g
5、etRecord(); setRecord();,小结,手机游戏特征 Java开发手机游戏的优势和缺点 总体设计 概要设计,学习单元二 游戏界面设计,学习目标: 建立应用程序 掌握Canvas类 掌握Graphics类 重点和难点: 建立应用程序 掌握Canvas类 掌握Graphics类 应具备的职业能力: 手机游戏系统的设计与开发 分析手机游戏系统用户界面的组成元素 设计用户界面、功能按钮布局 设计功能按钮的事件处理方法,建立应用程序,游戏也是一种MIDlet应用程序,因此它也有MIDlet生命周期,既startApp()、pauseApp()和destroyApp(boolean)三种方
6、法。 为了直接在屏幕图形,必须使用Canvas类,该类提供了一个供MIDlet 在上面绘制的空白屏幕。但是该类是一个抽象类,扩展了Displayable,为了能够在屏幕上画图像,必须创建一个类,该类继承Canvas类,并且重载(Override)paint(Graphics g)方法。paint(Graphics g)方法的实现使用了javax.microedition.lcdui.Graphics 类的绘制功能,所有的图像绘制工作都要在paint(Graphics g)方法中实现,所要绘制的图像的形状、颜色、大小等特性都在Graphics类实现中。,Canvas类,高级用户界面API是面向任
7、务的,程序员无法控制这些组件在屏幕上的显示。而低级用户界面API的控制权是赋予程序员的,程序员可以使用低级用户界面API在屏幕上画出自己想要的图形来。这种低级用户界面API特别适合于游戏的开发,因此,关于游戏的开发主要是针对低级用户界面API的开发。当然,在游戏开发过程中,也可以使用高级用户界面API,这不过这两种用户界面不可以同时存在。 为了直接在屏幕上绘制线条、文本和形状,必须使用Canvas类。,Graphics类,Graphics类提供了简单的2D绘图功能。它具有24位深度色彩的绘制能力,以三原色分别各占一个字节表示其颜色。程序只能在paint()函数中使用Graphics绘制。,坐标
8、设置,应用程序建立后,就可以在画布上画一些字符串,并设置字符串的颜色、大小、位置和形状等信息。对于Canvas画布,坐标(0,0)表示画布的左上角,坐标(getHeight(),getWidth()表示画布的右下角,每个单位表示一个像素。x轴坐标的值从左到右增加,y轴坐标的值从上到下增加。,颜色设置,不同的移动设备终端具有不同的颜色方案。24位(RGB)的颜色模型分别为红色、绿色和蓝色提供了8 位的值。然而,由于不是所有设备都支持彩色,所以应用程序要求的颜色将被映射成设备支持的颜色。Graphics类在设置和取得颜色方面提供了setColor()和getColor()两个方法。setColor
9、(int RGB)方法和setColor(int red, int green, int blue)两个方法来设置颜色。 例如:g.setColor(0x00FFFF00); 或者 g.setColor(255,255,255);,字体设置,应用程序不能创建字体,作为替代,应用程序可以根据属性(例如大小、外观和样式等)请求字体,然后底层实现将返回与请求字体最接近的字体。Font类代表各种字体和度量。,形状设置,Graphics类还提供了设置图像形状的方法,可以描述线、矩形、圆弧、字符串和图像等。画和填充是两个概念,例如:画一个矩形,可以使用drawRect(),矩形中间是空的;填充一个矩形可以
10、使用fillRect()方法来实现。画一字符串可以使用以下语句: g.drawString(“Copyright2005SZPT“,25,145,g.LEFT|g.TOP);,代码,代码,小结,建立应用程序 Canvas类 Graphics类,复习,建立应用程序 Canvas类 Graphics类,学习单元三 游戏菜单设计,学习目标: 设计动态菜单 屏幕坐标计算 重点和难点: 设计动态菜单 屏幕坐标计算 应具备的职业能力: 游戏界面菜单的设计与开发,设计目标,如何画游戏菜单? 如何设计动态菜单?,屏幕坐标,动态字体,动态字体,动态字体,小结,设计动态菜单 屏幕坐标计算,复习,坐标计算 动态字体
11、显示,学习单元四 事件处理,学习目标: 低级事件处理 高级事件处理 重点和难点: 低级事件处理 应具备的职业能力:能够综合运用低级事件处理和高级事件处理方法 完成游戏界面菜单的事件处理,低级事件处理,问题? 为什么点击菜单,程序没有反应? 菜单不能上下移动 ? 事件处理 在MIDP中,所有的低级事件处理都是基于Canvas对象的。低级事件处理的按键要根据ITU-T标准,根据ITU-T标准,0-9数字键、*和#键是所有手机都支持的。如果要想使开发出来的游戏具有较高的可移植性,建议开发者尽量使用ITU-T标准的按键。,低级事件处理,在MIDP中,规定了3个方法用于低级事件处理: protected
12、 void keyPressed(int keyCode); protected void keyReleased(int keyCode); protected void keyRepeated(int keyCode); 在MIDP API中定义了一些抽象按键表示按键的上、下、左、右和选择,它们分别为:UP、DOWN、LEFT、RIGHT和FIRE。但是有些设备上没有这样的抽象键,设备就把数字键2、4、6、8和5分别表示这些抽象键。,低级事件处理,如何获取按键的事件呢?Canvas类提供了两个方法: int getGameAction(int keyCode); int getKeyCod
13、e(int gameAction); 第一个方法的功能是从按键事件映射到抽象键事件;第二个方法的功能是从抽象键事件映射到按键事件。这两个方法都可以判断按键事件,具体来说就是当按下向下键时,使用getGameAction(int keyCode)方法就可以知道是抽象键DOWN;当选择了抽象键DOWN时,通过getKeyCode(int gameAction)就可以知道按下的向下键。,高级事件处理,由于本界面还有Alert对象用于显示制作小组和游戏方法等信息,所以还要加入高级事件处理方法。具体处理原理和过程本章将不会讲解,读者可以参考第四章的高级事件处理方法。,高级事件处理,高级事件处理,小结,低
14、级事件处理 高级事件处理,复习,低级事件处理 高级事件处理,学习单元五 多线程处理,学习目标: 设计出可以上下移动的菜单 复习游戏界面设计中的难点和重点 重点和难点: 设计出可以上下移动的菜单 应具备的职业能力: 利用多线程设计动态菜单,问题,问题: 在设计好菜单以后,菜单不能够进行选择,也就是在视觉上不能够进行上下移动,为什么会出现这样的问题呢?,解决方法,看看paint()方法,当程序调用paint()方法后,程序执行,画出一个菜单来,但是画完后,程序没有重画功能,所以屏幕会一直停留在初始状态。为了解决这样的问题,必须要引入多线程问题。,复习,界面设计(paint()方法) 颜色 字体 形状 菜单设计 动态字体 坐标计算 多线程设计 重画(repaint()方法),