Flash 是富媒体开发技术,最初用来开发交互式网站动画组件。Flash 游戏基于矢量图,具有体积小、传播快、画面美观等特点,深受 Web 网游玩家欢迎。
Flash 游戏在智能手机终端的跨平台发展中将网页版Flash 游戏的特点融入移动平台上,以其操作简单、文件体积小、不易卡顿等特点成为移动平台游戏的中坚力量。
Flash 以流式控制和矢量技术为核心。Flash 文档的扩展名为 .fla(FLA),新建或打开一个 Flash文档,呈现 Flash 游戏开发的四个主要部分:
(1)舞台:在回放过程中显示图形、视频、按钮等内容的位置。
(2)时间轴 :用来通知 Flash 显示图形和其它项目元素的时间,也可以使用时间轴指定舞台上各图形的分层顺序。
(3)库面板 :显示 Flash文档中媒体元素列表的位置。
(4)ActionScript 代码 :用来向文档中的媒体元素添加交互式内容,向应用程序添加逻辑,根据用户的操作采取不同的工作方式。
要在 Flash 中构建应用程序,可以使用 Flash 绘图工具创建图形,将其它媒体元素导入 Flash文档,定义如何以及何时使用各元素来实现应用程序的功能。
所使用的开发工具 Flash Builder 是一个由 Eclipse 平台扩展而成的集成开发环境(IDE),用来开发互联网应用程序(RIA)和跨平台应用程序,尤其是Adobe Flash 平台的应用。
1、游戏分析与设计
本文以传统的飞机大战为实例,游戏主要模块类的功能如下所示:
(1)Config 用来配置游戏各种参数 ;
(2)Control 用来控制游戏流程执行;
(3)NumPanel 是计时数字显示界面;
(4)Welcome 是欢迎界面;
(5)Fail 是失败提示界面;
(6)GameScene 是游戏主界面,游戏操作主要靠这个类完成。
(7)Tools 是工具类,提供各种快捷功能方法。
1.1、游戏规则设计
在游戏过程中,有个数字界面以秒为单位记录游戏时间。游戏失败后会重新开始计时。游戏时间越长,飞机的数量和速度就会更多更快。设置的游戏参数主要是飞机的速度、数量以及速度增加的情况,根据个人情况而定。
本游戏是躲避类游戏,点击屏幕进入游戏界面,游戏开始运行并计时。如果飞机碰撞则显示游戏失败,返回开始界面,再次点击游戏可继续进行。可以进入设置界面打开设置项,选择或改变参数。设置返回后游戏继续进行。
1.2、游戏界面设计
1.2.1、游戏失败提示界面
Fail 游戏失败提示界面会频繁出现,所以做成单例来精简游戏性能。此界面实现功能的流程:第一次调用时初始化该界面,一个半透明背景以及一个失败提示文字图片。当调用 show 方法时,会控制背景和文字渐现出来,同时返回自己,让调用方将自己添加到合适的容器内。渐现完成后便添加鼠标监听,单击屏幕后会继续渐隐直到消失,抛出游戏开始事件,游戏操作界面监听到开始事件后会重新开始游戏。
1.2.2、游戏欢迎界面
Welcome 欢迎界面只出现一次,不必做成单例。这个类的功能是在游戏开始时,渐现出现游戏名称,并作鼠标事件的监听。此时如果点击屏幕,会渐隐欢迎界面。渐隐结束后,将自己从父级容器中移除,同时抛出游戏开始事件。
2、游戏开发与实现
2.1、游戏工程创建
先用 FlashBuilder 创建一个游戏项目。FlashBuilder 不仅支持 Flash 本身,还能将 Flash 转换为手机游戏安装包。游戏项目创建如图1所示。
图1 游戏项目创建
打开创建项目工程窗口,可在桌面上创建 flight飞机大战工程。
2.2、游戏工程的设置
游戏工程创建完成后,还需要把素材添加到工程中。在游戏工程文件夹中可创建如下三个文件夹。fla文件夹放置游戏素材的 flash 源文件,lib文件夹放置导出的 swc 素材,p12文件夹放置打包安卓所需要的打包证书。进入 src文件夹创建一个 assets文件夹,将其他资源图片命名好后放到 assets目录下。回到 FlashBuilder,打开工程属性面板,将 lib 目录添加到项目中,这样工程就能引用 lib下的 swc文件。至此,游戏的工程设置和创建全部完成。
2.3、游戏的主类
Main 类是游戏的主类,具体如图 2 所示,同时也是游戏的执行入口。首先需要做舞台初始化监听,当舞台创建完成后才能继续进行下一步动作。
图2 游戏主类
2.4、游戏的流程控制类
Control 是游戏的流程控制类,是一个单例,具体如图 3所示。在游戏过程中,通过这个类发出一些命令,做出相应的改变。这个类可在游戏开始时初始化资源类的配置,然后提供一个游戏开始事件以及抛出事件的功能,最后启动欢迎界面。因为欢迎界面只出现一次,所以直接与游戏操作界面叠加,用过之后直接销毁即可。
2.5、游戏操作编程实现
2.5.1、检测飞机是否发生碰撞
检测碰撞时,需要将玩家操作的飞机和每一个敌机做碰撞检测。当检测到一个碰撞后,停止游戏所有的监听,这样就不能继续操作玩家飞机,所有其它的飞机也会停止,同时添加游戏失败提示界面。
图3 Control 控制类
// 检测玩家的飞机是否与敌方飞机发生碰撞
len = _planeOther.length ;
for(i = 0 ;i < len ;i++){
if(_plane.bitmapData.hitTest(new Point(_plane.x,_plane.y),
255,_hitPlane,new Point(_planeOther[i].x,_planeOther[i].y -
_planeOther[i].height),255)){
// 检测到发生碰撞,游戏失败,停止所有操作,展示失败界面
_isFail = true ;
this.remove EventListener(Event.ENTER_FRAME ,
enterFrame);
this.removeEventListener(MouseEvent.MOUSE_DOW N,
mouseDown);
this.removeEventListener(MouseEvent.MOUSE _MOVE,
mouseMove);
this . rem ove EventListener(Mouse Event. MOUSE_UP,
mouseUp);
_uiLayer.addChildAt(Fail.getInstance.show(),0);
return ;}}
碰撞检测算法主要有基于距离的碰撞检测和基于显示对象的碰撞检测。Flash 影片剪辑里有一个内置的方法 hitTest。
现在它已经被更合理地分成两种独立的方法,hitTestObject 方法用于测试一个显示对象(精灵、影片剪辑等)是否碰撞到另外一个,hitTestPoint 方法用来检测一个指定的点是否碰撞到一个显示对象。基于距离的碰撞检测的基本思路是 :两个对象各做一个外接包围圆,两个圆心的距离如果小于两圆半径之和就可以判定这两个圆发生碰撞。
2.5.2、判断飞机要不要加速
当前时间减去上一次速度发生变化的时间,如果这个差值大于速度变化的间隔时间,那么就表示需要加速。然后为当前速度加上速度增加量,如果速度超出上限,可以按最大值处理。
// 判断添加飞机的间隔时间是否发生改变
if(newTime - _planeChangeTime > Config.planeChangeTime){
_curShowPlaneTime -= Config.planeTimeDel ;
if(_curShowPlaneTime < Config.showPlaneTimeMin){
_curShowPlaneTime = Config.showPlaneTimeMin ;}
_planeChangeTime = newTime ; }
3、结 语
经过对系统进行测试和运行,得知游戏系统性能具有界面友好、操作方便、功能较完善等优点。游戏过程中的消息响应处理很快,且系统整体运行稳定。由于开发时间等方面的原因,该系统还可以在游戏音效、元素类型、游戏界面美工等方面予以完善。
参 考 文 献
[1] 赵亮,张维 . 基于 Android 技术的界面设计与研究 [J]. 电脑知识与技术,2009,5(29):8183-8185.
[2] 王丰,付明栋,冯海亮,等 . 智能终端图形用户界面设计与实现 [J].广播电视信息,2008(8):29-31.
[3] Eith Peters.Flash ActionScript 3.0 动画教程 [M]. 北京 :人民邮电出版社,2008.
[4] 靳言,姚尚朗 .Google Android 开发入门与实战 [M]. 北京 :人民邮电出版社,2009.
[5] 公磊,周聪 . 基于 Android 的移动终端应用程序开发与研究 [J]. 计算机与现代化,2008(8):85-89.
在这个网络发达的信息化时代,各种游戏如雨后春笋般涌现出来,比如有动作的、冒险的、策略的、射击的等等;游戏可以使人放松,因此现在已经很少有完全没接触过游戏的人存在了,游戏已渐渐成为人类文化艺术的一个重要组成部分。由于很多人都会沉溺于游戏中不...
0引言。Flash游戏设计是高职游戏软件专业的核心课程。对高职学生而言,该课程的实践操作性强、涉及知识面广,需要扎实的理论基础和熟练的编程能力。由于高职学生的基础相对较弱、自我学习主动性较差、同班学生水平参差不齐,因此,如何有效地调动学生的...