第7章节手机游戏制作技巧的提升

上传人:E**** 文档编号:91639028 上传时间:2019-06-30 格式:PPT 页数:38 大小:915.50KB
返回 下载 相关 举报
第7章节手机游戏制作技巧的提升_第1页
第1页 / 共38页
第7章节手机游戏制作技巧的提升_第2页
第2页 / 共38页
第7章节手机游戏制作技巧的提升_第3页
第3页 / 共38页
第7章节手机游戏制作技巧的提升_第4页
第4页 / 共38页
第7章节手机游戏制作技巧的提升_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《第7章节手机游戏制作技巧的提升》由会员分享,可在线阅读,更多相关《第7章节手机游戏制作技巧的提升(38页珍藏版)》请在金锄头文库上搜索。

1、第7章 手机游戏制作技巧的提升,能力目标,掌握图片过渡特效的处理方法; 熟练掌握手机游戏中动画制作的三种方法; 能在游戏中利用简单的人工智能丰富游戏效果; 掌握使用定时器完成需要自动处理的游戏效果; 能处理来电暂停和恢复; 能实现手机游戏中文字的自动折行和滚屏效果; 能利用WMA接收和发送短消息,并实现手机游戏的收费功能。,认知目标,了解ARGB色彩空间,并识记drawRGB()方法和getRGB()方法的使用方法; 熟记Sprite类中的setFrameSequence()、nextFrame()、prevFrame()getFrameSquence()、和getFrame()方法的作用和使

2、用方法; 了解手机游戏中的人工智能; 熟练掌握Timer类和TimerTask类配合使用的方法; 了解showNotify()和hideNotify()事件处理方法; 了解使用WMA接收和发送短消息。,7.1 学习情景描述,本章将在前六章的基础之上进行手机游戏制作技巧的进一步提升。包括以下主要的任务: 1、实现图片显示的过渡效果,丰富玩家的视觉效果。包括:“渐显”效果、“淡入淡出”效果、“百叶窗”和“块状”过渡效果。 2、动画制作方法有多种,最常用的三种是:使用图像数组实现动画、利用setClip()方法实现动画、利用Sprite对象播放动画。本章将分别利用这三种方法实现同一个动画的制作过程。

3、 3、使用简单的人工智能实现炮台子弹对飞机的跟踪射击,然后再使用定时器Timer进行改进,对炮台子弹的创建和发射频率实施控制。 4、利用Canvas类中提供的两个事件处理方法showNotify()和hideNotify()实现来电暂停和恢复处理。再综合利用Canvas类中提供的这两个事件处理方法和定时器Timer实现文字的自动折行和滚动效果。 5、利用WMA接收和发送短消息,在此基础之上实现手机游戏的收费功能。,7.2 图片过渡效果的处理,7.2.1 任务一:实现“渐显”过渡效果,从上到下的“渐显”效果,要点提示,在任务一中完成的是从上到下的“渐显”效果。显然,仿照这个思路,很容易就可以实现

4、从左到右的“渐显效果”。以下步骤实现的是既从上到下,同时又从左到右的“渐显”效果。,7.2.2 任务二:实现“淡入淡出”过渡效果,“淡入淡出”效果跟图片颜色的透明度相关,实际上就是图片透明度渐变的效果。,知识提炼:颜色的透明度,drawRGB()方法用于绘制带透明度的颜色,语法如下: public void drawRGB(int rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha) 参数说明: rgbData:以0XAARRGGBB格式存储ARGB图象的数

5、组。 offset:绘制的第一个图象数据在rgbData数组中的索引号。 scanlength:绘制图象每行数据的个数。 x, y:绘制图象区域左上角坐标。 width, height:绘制图象区域的宽度和高度。 processAlpha:用于控制是否处理透明度。取值为true时,处理透明度,即完全按照rgbData中的数据来绘制图象;取值为false时,不处理透明度,即不管rgbData中数据的透明度部分如何取值,只处理RGB部分,绘制出的图象是完全不透明的。,透明度(Alpha)是指背景颜色可见的程度。RGB色彩空间其实质应该是ARGB色彩空间,每一个像素点的颜色由一个32位的整数来表示。

6、如图所示。 透明度取值为0X00时,为全透明状态,即背景色完全显示出来,而前景色完全看不见。透明度取值为0XFF时,为全不透明状态,即背景色完全显示不出来,只有前景色能看见。,Image对象上定义的getRGB()方法用来获取图像中一个指定的矩形区域的ARGB数据值, getRGB()方法的语法如下: public void getRGB(int rgbData, int offset, int scanlength, int x, int y, int width, int height ) 参数说明: rgbData:以0XAARRGGBB格式存储ARGB图象的数组。 offset:存储的

7、第一个图象数据在rgbData数组中的索引号。 scanlength:存储图象每行数据的个数。 x, y:存储图象区域左上角坐标。 width, height:存储图象区域的宽度和高度。,7.2.3 延伸任务:实现“百叶窗”和“块状”过渡效果,“百叶窗”过渡效果是图片间切换最常用的方法之一。 “百叶窗”可以是纵向的,也可以是横向的。实现原理就是将整个屏幕“分割”成若干个纵向或横向的“叶片”,并设置显示这些“叶片”的剪切区域。然后,在线程中控制并改变剪切区域的起始位置以及“叶片”的宽度或者高度。,“块状”过渡效果的实现与“百叶窗”类似,即把整个图片“分割”成若干个大小相同的“块”。然后设置同这些

8、“块”大小相同的剪切区域,并在线程中控制并改变剪切区域的起始位置。,7.3 手机游戏中常用的动画制作方法,7.3.1 任务三:使用图像数组实现动画,在本任务中,将通过在不同的时间和不同的地点连续、循环地显示保存在图像数组中的一组静态图像来实现动画。 本任务实现的效果是小人沿着四边形区域的四条边不停地走动。,7.3.2 任务四:利用setClip()方法实现动画,在本任务中,首先利用setClip()方法在屏幕上指定一个绘制区域,然后再利用drawImage()方法显示图片中的某个小人。,要点提示,setClip()方法指定了一个绘制的区域,在绘制过程中,屏幕上只有落在该区域中的图像改变才被显示

9、出来,而其他区域则不受影响。这个绘制区域的大小就是图像帧的大小,即3248,但由于小人的位置在不断地改变,因此绘制区域的起点坐标也需要不断地改变。,7.3.3 任务五:利用Sprite对象播放动画,在MIDPv2.0中,提供了一个用于支持绘制动画的Sprite类。利用它可以显示一帧或多帧的连续图像。当然,所有的帧都必须是相同大小的,并且由一个Image对象提供。Sprite类可以循环显示每一帧图像,还可以指定图像帧的任意组合。 在本任务中,将利用Sprite类实现和任务三、任务四同样的动画效果。,要点提示,在新建一个Sprite精灵类实例后,会自动生成一个按所有可用图像帧的顺序排列的动画播放帧

10、序列。而在实际构成动画时,开发人员可以根据需要调用其中部分图像帧,并可以按任意顺序排列图像帧,图像帧可以被重复、忽略或者以相反的顺序显示,从而形成不同的动画效果。,Sprite类的setFrameSequence()方法用来明确设置动画播放帧序列。语法如下: public void setFrameSequence(int sequence),在确定了动画播放帧序列后,还需要通过调用nextFrame()或者prevFrame()方法来依次切换当前需要播放的图象帧。最后,通过paint()方法逐个绘制出动画播放帧序列中的图像帧。 另外,Sprite类的getFrameSquence()方法可以

11、获取构成动画播放序列的图像帧个数。getFrame()方法用于获取动画播放序列中当前正在播放的图像帧索引号。,7.4 手机游戏中的人工智能,7.4.1 知识准备:了解人工智能,人工智能,简称AI(Artificial Intelligence)。是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。人工智能研究的一个主要目标就是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。,在游戏领域,一说起人工智能就会让人立刻想到两种游戏:一是策略类游戏,二是棋弈类游戏。策略类游戏中,玩家运用策略与计算机或其他玩家较量,以取得游戏的胜利。而在棋弈类游戏中,游戏的主体通常

12、就是一个大的AI算法。,在手机游戏中,最简单、最常用的人工智能有以下两种: 一是随机数的使用。比如打老鼠游戏,一共有9个或16个洞,老鼠会随机出现在某个洞里,好像在故意躲避玩家的打击。使用随机数是手机游戏中最简单的人工智能。 二是规则导向或称之为条件导向。游戏设计者将游戏中的规则与设定转化成一个个的条件,然后在程序中通过对这些条件的判断,以决定下一步的行为。比如,在追逐的设计中,如果捕食者的x坐标大于猎物,捕食者的x坐标就减小,以移动靠近猎物。相反如果捕食者的x坐标小于猎物,捕食者的x的坐标就增大。在y轴上也需做相似的处理。而逃避的设计实质上就是追逐的逆运算。,7.4.2 任务六:实现炮台子弹

13、对飞机的跟踪射击,在本任务中,飞机可以由玩家通过上、下、左、右方向键实现在屏幕上的移动。位于屏幕中间的炮台有八个发射管,如图7-9所示。炮台会根据飞机的实时位置,分别从上中、右上、右中、右下、下中、左下、左中、左上八个方向发射子弹,实现对飞机的跟踪射击。,要点提示,程序中使用了一个向量vecPaotaiBullet来保存炮台子弹。每颗子弹使用一个一维数组装载,有三个元素,分别用于装载:x坐标、y坐标和方向。每颗子弹的x坐标和y坐标的初始值都是一样的,即都为炮台的坐标位置。 移动炮台子弹的方法是:首先,将炮台子弹从向量中取出。然后,根据 tem2的值(即子弹的方向)分别给tmp0(x方向)或tm

14、p1(y方向)加、减一个位移量。 由于tmp0和tmp1中保存的是炮台的位置,因此在绘制炮台子弹时需要根据子弹的方向确定出子弹的x位置和y位置,然后再通过drawImage()方法实现绘制。,7.4.3 延伸任务:使用定时器Timer实现对炮台子弹的控制,从任务六的运行效果可以看到,炮台的子弹过于密集,几乎连成了一条线,显得很不真实。原因是炮台子弹的创建、移动和绘制都放在了同一个主线程中,使得这三个动作的频率是一样的。如果让子弹的创建慢一些,即向量中的子弹少一些,而子弹的移动快一些,那么就可以达到比较良好的效果。,知识提炼:Timer类和TimerTask类,这两个类配合使用的方法为: 首先,

15、声明一个Timer类的对象。 然后,定义一个TimerTask类的子类,并实现run()方法。或者定义一个TimerTask类的对象,在定义体内直接实现run() 方法。 最后,调用Timer类中定义的schedule方法,该方法会自动调用run方法,以控制并完成任务的执行。,Timer类中定义的schedule方法有四种形式,语法如下: public void schedule(TimerTask task, long delay) public void schedule(TimerTask task, Date time) public void schedule(TimerTask t

16、ask, long delay, long period) public void schedule(TimerTask task, Date time, long period) 参数说明: task:TimerTask类的对象,即需要控制并完成的任务。 delay:在任务执行之前的延迟时间,单位ms。 time:执行任务的时间点,如果指定时间已过,则任务立即执行。 period:任务执行的时间间隔,单位ms。,一个定时器可以同时控制多个任务的执行,比如,在本任务中同时控制了创建子弹和移动子弹两个任务。 定时器实际上也是以线程的方式实现的,但定时器线程的优先级比普通线程的优先级要低得多,他并不提供实时保证,如果系统繁忙会导致不能按时执行任务。所以对实时性要求高的任务,比如屏幕的绘制,就不能使用定时器来完成。,7.5 使用Canvas对象的显示和隐藏事件,7.5.1 知识准备:了解showNotify()和hideNotify()事件处理方法,Canvas类中提供了两个事件处理方法:showNotify()和hideNotify()。他们的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号