基于Flash lite的手机打砖块益智游戏的设计
2014-02-14吴伟信庄月萍
吴伟信,庄月萍
(泉州师范学院 教育科学学院,福建 泉州362000)
基于Flash lite的手机打砖块益智游戏的设计
吴伟信,庄月萍
(泉州师范学院 教育科学学院,福建 泉州362000)
随着Flash技术在移动设备中的实现,在手机上开发游戏软件的速度大大地提高了,开发难度也有所降低.阐述了Flash lite的主要技术,并提出设计方案,设计了一款打砖块手机游戏,在构建了完善的游戏思维的基础上,分析了需要解决的关键问题及需要使用的关键技术,划分功能模块,实现整套游戏的开发,并采用手机模拟器进行模拟测试,验证游戏功能.
Flash lite;手机;打砖块;益智游戏;碰撞检测
移动学习正在成为人们学习的一种新方式,益智游戏也作为一种新型的学习方式逐渐被广大用户接受,这些可以让我们预见到手机益智游戏将会是手机、学习与游戏融合的一个必然趋势,寓教于乐的理想将在信息时代通过手机益智游戏的方式得以实现[1].
Flash lite是Adobe公司开发的专门针对移动设备而设计的一种Flash开发技术.利用Flash lite开发手机游戏具有占用存储空间小、支持脚本语言分割、平台无关性和适用所有主流手机制造商等优势.由Flash lite开发的手机游戏具有很好的通用性和可移植性.此外,Flash lite技术能将Flash功能与移动设备的处理能力和配置进行平衡,在动画显示、界面设计以及服务器整合等方面拥有先天性的优势,使得开发者能够快速地为移动设备开发出极具表现力、交互性强的游戏[2-3].针对手机硬件资源有限、屏幕小、游戏时间短等特点,应用Flash Lite技术设计简单、操作方便、有益于智力开发的手机游戏,有着及其广阔的发展空间[4].
1 打砖块游戏设计
1.1 设计思想
游戏者进入游戏后需要打掉所有砖块,游戏过程中会有益智题出现,以游戏者是否接住正确答案的礼品作为奖惩.在游戏开始时,游戏者的生命值为4,玩家通过方向键的上、下键控制挡板左右运动,用挡板挡住小球使小球弹起来,打掉上面的砖块.每打掉一个砖块,就可以得到相应的分数,如果挡板没有挡住小球致使小球落下,生命值减1,如果生命值为零,则游戏结束.游戏提供了奖惩元素,当小球打掉砖块时会不定时随机出现礼品,游戏过程中挡板会有益智题出现,当有益智题答案相关的礼品落下时,如果游戏者接住正确答案的礼品,挡板会变长,如果接住错误的答案礼品,挡板会变短.整个游戏共分为三关,游戏者在每关打掉所有的砖块,便进入下一关,通关后的每一关,通过递减砖块与挡板的距离增加游戏难度.总体流程设计见图l.
1.2 需要解决的主要问题
在研究Flash lite的基础上,对现有PC版打砖块游戏进行调研分析,结合益智游戏的特征,设计的手机游戏需要解决的主要问题如下:
(1)需要对游戏中角色进行碰撞检测,在角色进行移动的过程中,角色与角色之间可能会发生碰撞,检测可能发生的碰撞是游戏设计的关键,主要体现在砖块和小球的碰撞检测、小球和挡板的碰撞检测.
(2)通过键盘响应事件进行玩家挡板的左右移动控制,但小球弹射是自动运行,就需要有一定的智能性;小球弹射的运行算法体现在X方向和Y方向上的速度控制,运行区域控制和移动方向控制.
(3)即时进行游戏的记分和生命值显示实现对玩家的评价,在游戏中需要动态的显示当前玩家的游戏得分和玩家剩余的生命值,并控制游戏的晋级和结束.
(4)手机内存小,代码利用率高,所以该程序逻辑设计应相对严谨,应尽量将所有可能发生的事件及意外情况考虑在设计中.
2 关键技术分析
图1 游戏运行流程图
Flash游戏场景中采用hitTest方法,实现角色所对应的元件实例两两依次进行碰撞检测,判断两个元件或目标是否重叠和相交,如果相交或重叠,就执行相应的动作[6-7].基于hitTest方法进行碰撞检测有两种情况.
2.1 元件与某点相交的检测
应用于检测某一影片元件(MC)是否与一坐标(x,y)相交,语法格式:MC.hitTest(x,y,true[false]);当第3个参数取值为true时,将根据MC元件实例的实际图形范围进行碰撞检测,如果取值为false则通过MC的外框检测是否与(x,y)相交,判断的返回值为true或false.
2.2 两个元件间的相交检测
应用于检测两个元件是否发生相交或重叠的检测,语法格式:MC1.hitTest(MC2);其中MC1为被检测的影片元件,MC2为用来检测的影片元件;如果返回值为true,说明两个元件的外框有交叉,即发生了碰撞,如果返回值为False,说明两个元件没有发生碰撞[8].本研究主要采用该检测法进行游戏场景中的元件碰撞检测.应用方法:
if(_root.MC1.hitTest(_root.MC2))
{//发生碰撞后的处理代码}.
3 游戏主要功能模块的实现
3.1 挡板移动功能的实现
将挡板创建成影片元件,结合动态文本框在挡板上随机显示益智题;利用Key.isDown()方法实现手机键控制挡板移动,当按下手机向上方向键时,挡板向左移动;当按下向下方向键时,挡板向右移动.关键代码如下:
onClipEvent(load){
……
intervaltime=Math.floor(Math.random()*200)+600;
tshowlap=setInterval(tshow,intervaltime);//间隔intervaltime毫秒时间随机显示对应益智题元件
……
onClipEvent(enterFrame){
……
if(Key.isDown(Key.UP)){ //当按下手机键向上的方向键时
if(this._x>0){ //如果挡板的X轴位置大于0
this._x=this._x-_root.yidong; //挡板的位置向左移动
}else{
this._x=0; //否则挡板的位置为0
}
}
if(Key.isDown(Key.DOWN)){ //当按下手机键向下的方向键时
if(this._x<200){ //如果挡板的X轴位置小于200
this._x=this._x+_root.yidong; //挡板的位置向右移动
}else{
this._x=200; //否则挡板的位置为200
……
3.2 小球弹射功能的实现
通过enterFrame事件随时改变小球的位置,即定义两个变量,赋给大于0的初值,这两个变量控制小球移动时在X方向和Y方向上的速度,设置小球在手机屏幕范围内移动,若小球超出屏幕临界值时,将小球的X轴或Y轴固定在临界值,并控制小球沿相反方向移动,关键代码如下:
onClipEvent(enterFrame){
this._x=this._x+_root.qiux;//设定小球X方向按一定速度移动
this._y=this._y+_root.qiuy;//设定小球Y方向按一定速度移动
if(_x>200){ //如果小球X轴大于手机屏幕右边临界值
_root.qiu._x=200;//将小球X轴设定为手机屏幕临界值
_root.qiux=_root.qiux*-1;//控制小球在X轴方向上取反
if(_x<0){//如果小球X轴小于手机屏幕左边临界值
_root.qiu._x=0;//将小球X轴设定为手机屏幕左边临界值
_root.qiux=_root.qiux*-1;//控制小球在X轴方向上取反
}
if(_y>300){//如果小球Y轴大于手机屏幕下边临界值
……
this.removeMovieClip();//删除小球
……
3.3 小球与挡板、砖块与小球碰撞功能的实现
使用hitTest()方法检测小球与砖块和挡板是否发生碰撞;当小球碰撞到挡板时,改变小球属性中的_x、_y,直接控制小球沿相反方向运动,根据碰撞挡板的位置,调整小球移动的速度实现小球弹射.当砖块碰撞到小球时,根据碰撞的位置,控制小球的移动方向,运行砖块消失动画,并采用removeMovieClip()方法删除砖块;更新积分文本框,同时促发随机产生数字奖品(标注算式题可能的答案),玩家控制挡板碰撞正确答案的奖品即可增加挡板宽度,碰撞错误答案的奖品挡板变短[8].关键代码如下:
onClipEvent(enterFrame){
……
if(this.hitTest(_root.dangban)){//如果小球碰撞到挡板_
root.ball=_root.ball*-1;//变量“ball”的值取反,控制小球在Y轴上向相反方向运动
}
……
onClipEvent(enterFrame){
if(this.hitTest(_root.qiu)){//当小球与砖块发生碰撞
……
if(_root.qiu._y>this._y+6){//碰撞时,当小球在砖块上方
_root.qiuy=_root.qiuy*-1;//控制小球在Y轴方向上取反
this.play();}//运行砖块消失动画
if(_root.qiu._x<this._x&&_root.qiu._y>this._y-6&&_root.qiu._y<this._y+6){
//碰撞时,当小球在砖块偏左边
_root.qiux=_root.qiux*-1;//控制小球在X轴方向上取反
this.play();}//运行砖块消失动画
if(_root.qiu._y<this._y-6){//碰撞时,当小球在砖块下方
_root.qiuy=_root.qiuy*-1;//控制小球在Y轴方向上取反
this.play();}//运行砖块消失动画
if(_root.qiu._x>this._x&&_root.qiu._y>this._y-6&&_root.qiu._y<this._y+6){
//碰撞时,当小球在砖块偏右边
_root.qiux=_root.qiux*-1;//控制小球在X轴方向上取反
this.play();}//运行砖块消失动画
……
3.4 砖块排列的实现
使用二维数组定义砖块位置和duplicateMovieClip()方法复制排列砖块;定义一个二维数组,用于标示砖块位置的数组元素存放“1”,其它数组元素存放“0”,通过duplicateMovieClip()函数复制砖块,并将砖块放置于数组元素为“1”处;游戏的晋级就是通过改变数组元素的位置,改变舞台中砖块所排列出来的图形.主要代码如下:
……
定义二维数组,数组中1的位置用于放置砖块
……
onClipEvent(load){
for(i=0;i<_root.ditu[0].length;i++){
for(j=0;j<_root.ditu.length;j++){
if(_root.ditu[j][i]==1){//在二维数组中选择存放“1”的元素_
root.shendu++;//标示复制砖块层次
duplicateMovieClip(_root.zhuankuai,"zhuankuai"+_root.shendu,_root.shendu);
//数组元素为“1”处复制砖块
_root["zhuankuai"+_root.shendu]._x=15+i*10;//设置复制砖块的X坐标值
_root["zhuankuai"+_root.shendu]._y=30+j*20;}}}}//设置复制砖块的Y坐标值
……
3.5 游戏的调试运行
基于Flash lite平台开发打砖块游戏,将预处理、编译、打包等流程自动化,生成相应的SWF文件,调用Action Script脚本文件,并在Adobe Device Central手机模拟器中调试、运行,对发现Bug的代码进行修改.在模拟器上充分测试后,即可进行发布.当然,模拟器并不能模拟目标设备的所有方面,如设备的处理器速度、颜色深度或网络延迟等.游戏在手机模拟器反复测试以后,通过蓝牙发布到Android系统智能手机和基于IOS系统的iPhone手机上进行原型测试,效果良好.
4 结语
分析了手机打砖块益智游戏开发涉及到的关键技术,提出了打砖块游戏开发中基于Flash lite的hitTest碰撞检测方法,对需要解决的主要问题和实现方法进行了详细描述.游戏在测试过程中将预处理、调试、发布等流程自动化,在模拟器上以及手机设备进行测试、运行,游戏原型操作便捷,主要功能完善,能够适应Flash lite手机运行环境.
[1]刘孝安,黄亚平.基于Flash的幼儿益智游戏软件设计与开发[J].中国教育信息,2011(8):74-76.
[2]薛俊彦,张际平.手机游戏在儿童教学中的应用与发展[J].电化教育研究,2006(8):59-61.
[3]冉利龙.基于Flash Lite的片段式移动学习资源设计研究[J].湖北广播电视大学学报,2010,30(11):119-120.
[4]王珍珍,杨雪,傅键.基于Flash lite的移动学习资源开发研究[J].现代教育技术,2009,19(4):102-104.
[5]刘涛.手机动画制作[M].北京:高等教育出版社,2008.
[6]陈焱,周莹莹,杨柏林.适用于移动设备的实时碰撞检测算法[J].计算机工程,2010,36(6):273-275.
[7]谭云兰,王生保,喻一凡,等.弹幕类游戏中快速碰撞检测算法的设计与应用[J].井冈山大学学报:自然科学版,2010,31(6):82-85.
[8]王玥,吕天君.Flash游戏开发技术与实践[M].北京:清华大学出版社,2013.
On the design of BrickBreaker puzzle game on mobile phone with Flash lite
WU Wei-xin,ZHUANG Yue-ping
(School of Education Science,Quanzhou Normal University,Quanzhou 362000,Fujian,China)
With the implementation of Flash technology on mobile device,the development of mobile phone games is speeded up as well as easier.This paper,based on the brief introduction to Flash lite technology,put forward a new design scheme.As an application,a mobile phone BrickBreaker is designed,and some key techniques are discussed which are used to fullfill the system.on the basis of building a sound game thinking, the game need to analyze the key issues and to use the key technology of functional modules.At the end, simulating the phone simulator tests is to facilitate the realization of inspection games.
Flash lite;mobile phone;BrickBreaker;puzzle game;collision detection
TP393.09
:A
:1007-5348(2014)08-0015-05
(责任编辑:欧 恺)
2014-04-01
福建省教育厅A类科技项目(JA12282);泉州市科技项目(2012Z123).
吴伟信(1977-),男,福建南安人,泉州师范学院教育科学学院副教授,硕士,主要从事网络多媒体技术与网络游戏教育软件设计方面的研究.