当前位置:文档之家› j2me模拟粒子系统实现火焰效果2007-8-092

j2me模拟粒子系统实现火焰效果2007-8-092

2007年4月

April 2007

—264

— 计 算 机 工 程Computer Engineering 第33卷 第8期

Vol.33 No.8 ·开发研究与设计技术·

文章编号:1000—3428(2007)08—0264—03

文献标识码:A

中图分类号:TP311.11

基于粒子系统的火焰特效在J2ME 游戏中的实现

肖春秀,张海翔,陈 纯

(浙江大学计算机科学与技术学院,杭州 310027)

摘 要:基于粒子系统的特效是广泛应用于PC 游戏制作的一项重要技术。该文根据J2ME 手机平台的特性,提出了适合J2ME 平台的基于粒子系统的火焰特效实现方法,分析了火焰特效的特征,采用程序创建的方法为火焰特效创建了所需的调色板,给出了火焰特效的运动算法和针对平台的优化算法并讨论了火焰特效在游戏应用中的绘制方法以及对绘制速度和顺序的控制方法。 关键词:手机游戏;J2ME ;粒子系统;火焰特效

Realization of Fire Effect in J2ME Mobile Games

Based on Article System

XIAO Chunxiu, ZHANG Haixiang, CHEN Chun

(College of Computer Science and Technology, Zhejiang University, Hangzhou 310027)

【Abstract 】This paper introduces a solution with method of modeling and optimization to simulate fire animation based on article system on the platform of J2ME. The method involves 4 aspects: analysis of the character of fire, creation of colour pane, designment of algorithm and optimization of algorithm according to the mobile platform. It shows how to realize the fire effect in the mobile games on J2ME. 【Key words 】Mobile games; J2ME; Article system; Fire effect

Reeves 于1983年提出了用粒子系统模拟模糊物体,并用其模拟了行星被撞击后产生的火焰。此后,粒子系统受到越来越多的重视,基于粒子系统的研究日益增多,其在计算机图形方面的应用也日趋广泛。目前,应用粒子系统制作的PC 游戏也以其优美的画面、逼真的效果受到越来越多的人们的喜爱。随着粒子系统在PC 游戏等高性能平台上日益广泛的应用,其在游戏开发中的地位也日益重要,游戏玩家们已经可以在这个虚拟的世界体验到真实世界的景象,如狂风、暴雨、熊熊的火焰、涓涓的流水、雄伟的瀑布、震撼的爆破等。这些效果实现的基础是建立一个数学或者物理模型,进行大量的计算,而且这些运算多为浮点运算。由于实现基于粒子系统的效果模拟需要较高的机器性能,包括较高的CPU 运行速度和较大的内存,因此这些可以方便地在PC 上实现的美妙效果,对于手机游戏的开发平台来说是比较困难的。

本文提出了一种针对J2ME 平台的、计算量小且具有充分可行性的实现火焰模拟的方法,通过分析火焰模拟的特征,建立的调色板,创建运算模型和平台优化,成功地在J2ME 平台上实现了基于粒子系统的火焰特效,改善了游戏效果。

1 火焰特效的实现

1.1 分析火焰特效的特征

要实现火焰特效,就先要分析其特征,确定要实现的特效的外观,以及是否可以用具有一些特有属性的粒子来描述,比如什么颜色、如何运动、什么形状等。

火焰的特征是非常鲜明的,就是红红的烈火熊熊燃烧。所以首先确定火焰的颜色主要由红色和黄色2种基本色构成,加上默认的背景颜色黑色,那么火焰效果需要3种基本颜色。然后分析火焰的运动形式:火焰的运动多数以火苗向上为主,即从火源开始向上升腾,颜色由淡黄色到红褐色最后变成黑色消失。就火焰的形状而言,其形状很难确定。但是常用的效果如蜡烛、火把等,其形状都是上下窄中间偏下方位宽,用多个这样形状的火焰也可以组合成壮观的熊熊 大火。

效果的颜色决定了绘制时所需要的调色板,火焰特效所需要的基本颜色是红、黄(一般抽象出2、3种基本颜色即可,然后根据调色板的生成原理来生成其他的过渡颜色);运动规律决定了粒子在各个方向的速度,以及它们的生命周期,即决定了最核心的算法部分;效果的形状决定了如何对最终的效果进行剪裁,使之更具真实感。

1.2 创建调色板

通过上述分析,可知首先要创建一个合适的调色板,它决定了效果的外在颜色,是效果实现中非常关键的一个环节。但对于J2ME 手机平台,它本身没有内置调色板,所以需要在游戏中通过软件程序来手动创建调色板,也可以通过读取预先做好的调色板图片文件来完成调色板的设定。由于火焰效果比较简单,所需的颜色较少又很规则,同时结合J2ME 平台的内存资源宝贵和文件读取速度有限等各个因素考虑,这里选择用代码生成所需的调色板。

另外,创建调色板时,颜色的数量是一个需要考虑的问题。对于J2ME 手机平台,在兼顾效果的同时,调色板的颜色数越少越好,这样,不仅可以节省内存空间,而且创建的复杂度和速度都会相应地降低和加快,调整起来也比较方便,所以一般选择2的整数次幂的颜色数量。

最后根据以上的分析及不断的对比和调整,获取随机数,

作者简介:肖春秀(1976-),女,硕士生,主研方向:嵌入式系统开发;张海翔,讲师、博士;陈 纯,教授、博士、博导 收稿日期:2006-05-26 E-mail :xiao_chunxiu@https://www.doczj.com/doc/bb17853209.html,

然后按照一定的算法进行换算,得到了64种颜色,这完全可以满足火焰效果的要求。颜色若再少,其升腾的高度就会受到影响,因为变成黑色的速度快了,并且从64种颜色减少到32种,只节省100B 左右的空间,没有太大的实际意义。

火焰特效的调色板如图1所示。

图1 火焰特效的一个调色板

1.3 粒子的初始化

一般来说,要对粒子的所有属性进行初始化设置,比如:粒子的水平速度,垂直速度以及相应的加速度,粒子的颜色,生命周期等。根据各种不同的效果,粒子有很多不同的初始化方法。

针对火焰特效而言,粒子的初始化主要是火焰粒子的数量、火焰升腾的速度、火焰的高度和宽度。

1.4 特效的运动算法

特效的运动算法是整个粒子特效中最关键的一步。一个好的算法不仅可以很好地展现出所需的效果,其速度也非常快,这一点对于J2ME 平台尤为重要,甚至可以说,速度比效果更重要,效果再逼真,在手机上根本无法运行也是毫无用处的。

这里采用了模糊技术来处理火焰的升腾,即由周围的点获得当前点的颜色值。

用下面的公式表示为

(,)(,1)(1,1)(1,1(,)4

Pixel x y Pixel x y Pixel x y Pixel x y Pixel x y +++?++++=

一个游戏的主人公自然是可以被控制的,它的移动、攻

)(1)

即把屏幕上的每一个点用它自己以及下面的3个点的平均值代替。式(1)也可以这样理解,每一点都是由下面的3个点所产生的,而火源在最下面,那么新产生的颜色一定比下面的平均颜色深,即越到上面越深,渐渐变成黑色而消失。又由于火源是在不断的变化的,因此各点消失的高度会有多种变化,看起来像是火焰在燃烧。

1.5 针对平台的优化 1.5.1 优化方法

优化是粒子特效在J2ME 手机平台上实现的必不可少的一步。虽然按照以上的方法可以在J2ME 的手机上实现火焰特效,但是由于手机平台的资源非常有限,而且同一种特效可能在某个游戏中运行顺畅,但在另一个复杂的游戏中由于内存或者运行速度等原因而导致效果不佳,因此要尽可能地进行优化,节省资源。

针对平台的优化包括算法的优化、代码的优化和数据变量的优化3方面:

(1)算法的优化

对于J2ME 手机平台,算法的优化主要体现在算法的简化上,很多细节的处理都要适当地删减、复杂函数的计算都要用更简单的办法来替代。在火焰模拟的运动算法中,要对每个粒子或是屏幕上一定范围内的每一个像素进行计算,那么循环变量边界的确定会直接影响效果的速度,所以粒子的数量以及粒子特效的大小是很重要的2个参数,在设计时要仔细考虑,尽可能在不影响火焰效果的情况下减少粒子数量。

(2)代码的优化

代码上的优化也是集中在算法部分,循环内部的代码更要求精练。单层循环和多层循环不能包含冗余的代码。优化过程主要包括以下4个方面:

1)判断语句(if)尽量放到循环外面;

2)避免乘法和除法的出现,用左移(<<)和右移(>>)代替;

3)减少函数调用,减少调用函数时的参数数量; 4)减少重复计算。 (3)数据变量的优化

数据变量的优化主要是为了节省更多的内存空间,因为每种效果在运行过程中,都要对每个粒子或效果范围内的点作记录,那么描述粒子结构尽量简洁,无用的属性作必要的删减。

1.5.2 火焰特效的优化

根据以上介绍的优化方法,来优化火焰特效的算法和代码。由于在设计粒子运动算法的阶段必须考虑效率,选择了简练的火焰粒子运动算法,因此核心算法基本上不需要再 优化。

但是在实现火焰特效的代码中,要重复执行生成火源和火焰升腾这2部分的代码,其中升腾部分的代码比较简单固定,就是根据式(1)计算。而火源的产生的代码要在每一个循环中获取一个随机数,但获取随机数是一个相对较慢的过程,所以该部分的代码的运行速度还不尽人意,可以进行代码优化。优化的基本思想是提出帧的概念。将火焰的每次处理周期作为一帧,为了避免反复地获取随机数,在最开始,即创建调色板的同时,把火焰各帧的随机数都取好,储存在一个数组中,每次产生新的火源时,只需要一个简单的赋值操作即可,这样效率就会有所提升。

这样就出现了一个新的问题,即预先保留多少帧呢?每一帧都需要存储FIRE_WIDTH (火焰的宽度)个随机点,在J2ME 手机平台中,设置此值为8,即8个点。保留的帧数太少,效果就很差,火焰感觉僵硬,一直重复几个动作;反之,浪费内存。经过多次调试和对比,最后发现取10帧时火焰的效果比较自然,并且一个小火焰仅占用80B 空间。

同时按照1.5.1节中的代码优化的4条建议,可以对代码进行更细致的优化,比如将“/4”的操作用“>> 2”来代替等。

最后讨论实现一个火焰效果占用的内存总量。64色调色板占用64×4=256B ;火焰颜色数组占用FIRE_HEIGHT ×FIRE_WIDTH =8×10=80B ;保留帧数组占用80B 。一共是256+80×2=416B ,由于火焰之间调色板是可以公用的,因此每增加一个火焰效果,内存仅增加了160B ,像上面35个火焰一共占用内存256+80×2×35=5856B ,约5KB 。这样的内存占有量对J2ME 手机平台来说是可以接受的。

根据以上的实现过程,最后在J2ME 手机上实现了如 图2所示的火焰特效。

图2 基于粒子系统的火焰模拟

2 焰特效在J2ME 游戏中的应用

2.1 游戏中的元素

一个完整的游戏,通常包括游戏场景、可移动的精灵和固定3大元素。

游戏场景包括背景和人物,是给玩家视觉冲击最大的图像元素。由于手机平台对资源大小的限制,一般背景都采用重复元素拼凑而成的。在游戏中有2种背景:一种是始终处于人物下方的,比如地面、小石块等,它们始终不会遮挡住人物;另一种是立体背景,比如树木、房屋等,它们是地图上的元素,但是有时会遮挡人物,有时会被人物遮挡。

—265—

击、主要包括属于背景的一些不能自由移动的物体和属特效,需要考虑火焰绘制的法

现的位置和火焰的大小。在实现过程

getIndex(x, y + 1) + = index; }

2.2.2 时器的设定

控制特效动画中帧与帧之间的时间间隔的定200m 进行,将数据处理与界面绘~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

态和动态信息,从而直观、清楚地了解各需要实时动态标图作业。作战标绘即结合了一种基于Web 的集信息发布与多媒体通信技术为 2 李汉如, 王家耀. 战场数字事测绘新技术集成[J]. 解报, 2002, 18(3): 16-18.

拾取等动作都是由玩家按键控制的,即可移动的精灵。可移动的精灵在J2ME 中,可通过Sprite 接口来控制它们的动画效果。

固定元素于UI (User Interface )层面的操作界面的显示,比如:各种对话框、提示信息的显示等。它们与主角没有遮挡关系,这些固定元素总是在背景和人物的最上层。

2.2 火焰特效在J2ME 游戏中实现

要在J2ME 手机游戏中实现火焰方法、绘制顺序和绘制速度3个方面的问题。火焰绘制顺序的控制主要处理火焰特效与地图背景、人物之间的遮挡关系。用定时器来控制特效动画中帧与帧之间的时间间隔,控制火焰绘制的速度。

2.2.1 火焰特效的绘制方绘制火焰要确定火焰出中,设定火焰特效的范围是规则的矩形,根据火焰的位置和大小计算特效显示的边界值,确定屏幕范围,然后根据式(1)对这个范围内的屏幕像素进行逐点计算,最后将这一区域绘制到屏幕上。绘制过程的代码如下:

endy = starty + FIRE_HEIGHT; endx = startx + FIRE_WIDTH; for (y = starty; y < endy; y ++) for (x = startx; x < endx; x ++){byte index = (getIndex(x, y) +getIndex(x - 1, y + 1) + getIndex(x + 1, y + 1)) / 4;

rgbData[x - m_Pos.x*FIRE_WIDTH + y - m_Pos.y]drawPixel(m_pDib, x, y, rgbData[index]); 定特效的实现需要时器。为了实现比较流畅的动画效果,这个时间不能太长,但是绘制一定数量的特效本身就需要时间,再加上人物、背景等元素的绘制,时间会很长,因此这个时间也不能太短。

在没有加入特效的时候,刷屏时间设定为200ms ,即每s 处理一次数据同时绘制一次屏幕,这样的间隔对于特效来说明显太大。解决问题的最简单的办法就是再设置一个间隔小的定时器,但是这样完成的效果是不符合实际的,2种绘制交替进行,无法保证特效的绘制一定在背景之上,有时会发生特效短暂的消失。

因此,整个绘制过程要统一制分开。经过测试,100ms 的时间间隔较为合适,而为了保持200ms 的数据刷新时间,最方便的办法是设定2个定时器,各自独立处理。也可以设定一个100ms 的定时器,并附一个记录变量,当累计到200ms 时,处理一次数据。

2.2.3 遮挡关系的处理

对于火焰特效,与背景地图的遮挡关系比较简单,总是属于背景,在地图背景之上的。但与人物的遮挡关系就复杂一点,要根据人物与火焰特效的相对位置来决定。由于人物总是移动的,火焰特效的绘制顺序并不是不变的,可能在绘制人物之前,也可能在绘制人物之后。这个顺序要根据人物位置的改变而改变,这样才能正确地显示人物和背景与火焰特效之间的遮挡关系。

在游戏中实现火焰特效时,特效的绘制要与人物的绘制统一起来,每当绘制周期到来时,要根据人物与特效之间的位置关系,排列它们的绘制顺序,即纵坐标小的先画,大的后画,这样的效果就符合事实了。以下的代码示意了人物与火焰的遮挡关系的处理:

If(role_Y > fire_Y){

drawRole( ); drawFire( );} else{

drawFire( ); drawRole( );}

3 展望

随着手机硬件的进步,粒子系统技术可以更好地服务于手机游戏,更多更逼真的特效效果将被实现并应用到手机游戏中,而建立更完善的模型将是手机粒子系统要面临的问题和挑战。

参考文献

1 Reeves W T. Particle Systems ——a Technique for Modeling a Class of Fuzzy Objects[J]. Computer Graphics, 1983, 17(3): 359-376.

2 Reeves W T, Blau R. Approximate and Probabilistic Algorithms for Shading and Rendering Structured Particle System[J]. Computer Graphics, 1985, 19(3): 313-322.

3 张 芹, 吴慧中. 基于粒子系统的火焰模型及其生成方法研究[J]. 计算机辅助设计与图形学学报, 2001, 13(1): 78-82.

4 张 芹, 谢隽毅, 吴慧中, 等. 火焰、烟、云等不规则物体建模方法研究综述[J]. 中国图像图形学报, 2000, 5(3): 186-190.

5 王志刚. 基于粒子系统和纹理映射的火焰模拟[J]. 工程图学学报, 2002, 23(4): 49-53.

(上接第263页)

全景、立体、交互式的并带有战场信息及军事地理信息的标图上显示必要的静种预案的基本情况。

(5)实时作战标绘

部队在作战中经常军标符号库,在背景地图上,通过标绘各种点、线、面、文字注记等作战要素,制作首长决心图、战斗经过图、兵力部署图等。MGIS 的基础图库及态势信息的更新数据从MGIS 服务器上获取。

3 结束语

本文提出一体的反恐维稳指挥自动化系统。系统集地理信息、情报信息、作战信息及作战预案于一体,为指挥员提供了一种注,可随意观察战区的所有地理信息。系统突破了传统的封闭式指挥方式,很好地实现了各军区联合作战及诸军兵种的合同作战。在情况瞬息多变的战场环境中,本系统能使指挥员真正做到“运筹帷幄之中,决胜千里之外”,及时有效地达到反对恐怖主义,确保国家安全和维护社会稳定的作战目的。

参考文献

1 中国人民解放军空军司令部. 空军指挥自动化[Z]. 2004.

化建设与军放军测绘学院学报, 1996, 13(2): 138-142.

3 宋关福, 钟耳顺. 组件式地理信息系统研究与开发[J]. 中国图象图形学报, 1998, 3(4): 313-317.

4 杨 鹤, 夏胜银. 国际反恐形势发展对我国武警部队反恐行动的影响及对策[J]. 武警工程学院学 —266

相关主题
文本预览
相关文档 最新文档