APP下载

基于AS3.0的Flash游戏设计与开发

2014-03-16彭婀娜

电脑与电信 2014年3期
关键词:游动水手子弹

彭婀娜

(广州市公用事业技师学院,广东 广州 510100)

基于AS3.0的Flash游戏设计与开发

彭婀娜

(广州市公用事业技师学院,广东 广州 510100)

Flash因其灵活、方便、文件体积小等优势成为网页游戏开发的宠儿,其中脚本语言Active Script 3.0是一种完全面向对象的语言,与旧版本相比,其扩展性、可读性更强,编译速度更快,性能更高。笔者尝试使用AS 3.0编写“水手捕鱼”网页游戏,并从功能分析、游戏流程、关键技术等方面阐述设计思路。

flash游戏;AS3.0技术;面向对象;游戏开发

1.引言

Flash游戏是一种随网络兴起的游戏形式,因其游戏简单、操作方便、无需安装、文件体积小等优点而深受广大网友欢迎。在网络图像、动画的传输上,Flash有着得天独厚的优势,Flash player及其插件的高普及率使得flash成为网页游戏开发者的宠儿。Flash技术包含一套可编程脚本解析器,称为ActionScript,可以控制Flash动画,实现多种交互功能,成为了绝大多数小游戏开发的技术基础。

2.AS3.0的优势

ActionScript3.0(简称AS3.0)是Flash新一代脚本语言,是一个完全基本OOP的标准化面向对象语言。与以前的版本语言(AS2.0)相比,AS3代码更加模块化,可读性更好,扩展性更强,并且新增了很多功能,性能也大大地提高。主要体现在以下几个方面:

(1)采用新一代虚拟机:在编译阶段,AS2采用的是AVM1(ActionScript Virtual Machine),而 AS3采 用的是AVM2。新一代虚拟机采用了OOP思想,在执行速度上比起AVM1也快了10倍。相对于AS2运行出错需要花费大量时间排错的缺陷,AVM2还提供了异常处理机制,与目前主流的编译器一样,运行出错会输出错误提示,工作效率大大提高。

(2)代码规范化与标准化:AS3的事件机制采用的是监听的方式,和AS2的OnClipEvent不同,AS3里所有的事件都是需要触发器、监听器、执行器三种结构的,这样做的好处就是使得这个语言得到很大程度的规范化与标准化。不像AS2,由于编写不规范,使得代码变得繁复难懂,可读性差,执行效率也大大降低。要特别说明的是,AS3的所有事件都直接继承event对象,而event是直接继承自BOSS类object,结构更加紧凑。所以在AS3中,所有的事件都继承自相同的父类,结构相同,提高了重用性。

(3)程序安全性提高:与以前的版本不同,AS3引入了封装的概念,使得程序安全性大大提高,各个对象之间的关系也通过封装,访问控制而得以确定,避免了不可靠的访问给程序带来的意外产生。

(4)读取XML的优化:AS2时代对XML的存取仍然需要解析,而AS3则创新地将XML也视作一个对象,存取XML就像存取普通对象的属性一样方便,可以采用访问标准对象中的属性的方式来访问节点。使用点表示法和XMLList方法,便可以轻松获取信息,无疑大大提高了效率。

3.使用AS3.0开发flash游戏的具体实践

本文以“水手捕鱼”游戏开发为例,探索使用AS3开发Flash游戏的实践过程。

3.1 游戏的功能分析

“水手捕鱼”游戏以几位水手商量出海捕鱼赚取金币的对话开始,在航海地图中选择捕鱼海域,之后选择角色,进入捕鱼游戏主界面。游戏以五彩斑斓的海底世界为背景,其中有各种海底生物自由游动,玩家通过发射鱼炮进行捕鱼,在限定的时间内使用限定的子弹数量,达到既定的分数即为挑战成功。游戏要实现的主要功能如下:

(1)游戏分为快速、简单、普通、达人四人模式,每种模式的时间限制、分数限制、子弹限制各不同;

(2)游戏的运行速度流畅,画面清晰,给玩家带来淋漓尽致的操作快感;

(3)移动鼠标可以操作大炮的左右移动,点击左键能够发射网炮,按下空格键可以切换鱼炮的级别,级别越高威力越大,所耗子弹数越多;

(4)呈现多种海洋生物自由游动,每种生物的生命力不同,分值也不同;

(5)发射的鱼炮击中鱼后,撒出鱼网,鱼网覆盖范围内的鱼儿生命力会减小,直到被降为零后被捕获;

(6)除了自由游动的鱼之外,还有鱼群鱼阵随机蜂拥而出。

3.2 游戏的设计分析

3.2.1“水手捕鱼”游戏软件的执行流程如图1所示:

3.2.2 游戏的关键技术实现

在“水手捕鱼”游戏中,海洋生物的游动轨迹与出现概率、鱼炮的飞行轨迹、子弹杀伤力的级别属性设置等是游戏实现的关键技术。因此我们应用了AS3.0中几种特殊的类:

Vector2D类。二维向量类,提供了向量的加法、减法、与标量的乘法、与标量的除法、取反、克隆、置0、求长度、求角度、设置长度、求两个向量距离、求两个向量点积、求两个向量叉乘、判断两个向量是否相等等方法。

Vehicle类。机车类,具有质量、最大速率、位移、速度等属性,其中位移和速度是向量,用Vector2D的实例来表示。该类中有一个重要方法update(),调用该方法可以使机车根据当前位移和速度求出新的位移,并更新与显示有关的x、y、rotation属性。

SteeredVehicle类。转向机车类,是Vehicle类的子类。Vehicle类的对象只能以一定的速度一直移动,SteeredVehicle类的对象可以改变速度的大小和方向,具有搜寻、逃避、到达、追捕、躲避、漫游、规避、路径追随、群落等行为,而且运动轨迹自然流畅。

在本游戏软件中,我们编写的元件类有以下几个:

Fish类。代表鱼的类,是各种具体鱼类的父类,各种由FLASH生成的具体鱼类都继承Fish类。Fish类继承Steered-Vehicle类,因此具有代表各种转向行为的方法,还具有鱼类型、游动形式、生命值、遵循路径编号等属性。

Bullet类。代表子弹的类,继承Vehicle类,因此会以恒定速度移动,还具有代表杀伤力的属性。与FLASH中的子弹元件绑定。

Net类。代表鱼网的类,具有代表杀伤力的属性,与FLASH中的鱼网元件绑定。

Gun类。代表炮的类,与FLASH中的炮元件绑定。其中的pointTo方法可使炮指向舞台上的指定点。

Coin类。是金币类GoldenCoin和银币类SilverCoin的父类,本身继承Vehicle类,因此会以恒定速度移动,从而使金银币飞向炮台。具有代表价值的属性。

AutoVanishText类。一个能在指定时间后自动消失的文本框类,主要用于显示鱼被打死后由于杀死该鱼所得分数。

例如:Fish类的结构如下:

public class Fish extends SteeredVehicle{

public static const MOVE_WANDER:int=1;//鱼的游动形式之一,自由流动,是最常见的游动形式

public static const MOVE_PATH:int=2;//鱼的游动形式之一,沿固定路径游动

public static const MOVE_FORWARD:int=3;//鱼的游动形式之一,鱼一直向前游动,速度不变

private var_type:int=0; //鱼的类型

private var_moveMode:int=MOVE_WANDER;//鱼的游动形式

private var_blood:int=1; //鱼的生命值

private var_pathId:int=0; //在MOVE_PATH模式下所遵从的路径序号

case MOVE_FORWARD: //什么代码都不用写,执行完update()后自然会向前

另外,我们还编写了用于集中管理数据的类——Data类。该类有常量、变量和方法,全部都是静态的。常量有表示舞台高度和宽度的常量、代表各种模式编号的常量。变量主要用于容纳从data.xml文件中读入的数据,这些数据包括各种鱼的参数数据、各种模式的参数数据、路径的坐标数据、鱼阵的坐标数据。方法只有一个getRandomFishId,用于取得一个代表鱼种类的整数,这个整数的出现规律是按照fishChances数组中的概率来分布的:

public class Data {

public static const STAGE_WIDTH:int=800;

public static const fishChances:Array=new Array();

……//定义各种参数

/*取得一个代表鱼种类的整数,这个整数的出现规律是按照fishChances数组中的概率来分布的*/

4.使用AS3.0编程技术的亮点

(1)在游戏中,我们引入XML文件管理数据,实现程序与数据之间的松耦合。鱼特征参数、模式特征参数、水手描述数据、鱼游动路径坐标数据、鱼阵坐标数据等都放在data. xml文件中,使这些数据的增加、修改、删除都十分方便,不需修改源代码也不需重新编译。

(2)碰撞检测的技术突破。每一帧都需要进行鱼和子弹的碰撞检测,用的是两重循环逐个检查的方法。如果在飞的子弹有m颗,鱼有n条,则算法的时间复杂度是O(mn)量级的。在发现碰撞之后,会释放渔网,这时需要检测渔网与所有的鱼是否会发生碰撞。如果处理不好,时间复杂度会变成O(mn2)量级,降低运行效率。为了控制时间复杂度,在发现一次碰撞,释放一个渔网之后,马上退出上述的两重循环,使时间复杂度控制在O(mn)+O(n)即仍是O(mn)量级。这样处理之后,在一帧中最多只会释放一个渔网。

(3)鱼的游动采用了人工智能范畴的转向行为算法。所采用的转向行为算法基于力学模型——力作用于物体产生加速度,加速度引起速度的逐渐改变,因此速度不会骤然剧变,从而鱼的游动能够平顺自然。

5.结语

在游戏设计过程中,我们领略了AS3.0强大的功能带来的独特魅力,其封装性、灵活性给开发工作带来极大的便利,也使得开发者在更多方面的发挥不受限制。随着网络的不断发展与电子产品的增多,Flash游戏在各种终端的普及率越来越高,也使得AS技术的应用更加广泛,在网页游戏开发的主流地位也进一步得以巩固。

[1]Keith Peters.Flash ActionScript 3.0动画高级教程[M].苏金国等译.北京:人民邮电出版社,2010.

[2]朱冬玲.用AS3和Java开发竞赛型多机游戏[J].福建电脑,2012,7.

[3]adobe公司.adobe flash action script 3.0中文版经典教程[M].北京:人民邮电出版社,2009.

[4]王愉.付震蓬.罗慧.隋涌.flash互动游戏的开发与设计[J].北京印刷学院报,2006.8.

[6]Jeff Fulton,Steve Fulton.The Essential Guide to Flash Games[M].USA:friendsof ED,2010.

Design and Development of Flash Game Based onAS3.0

Peng Enuo
(Guangzhou Public Utility Technician College,Guangzhou 510100,Guangdong)

tract】 Flash is applied widely in web game development because of its flexibility,convenience and small-size file.The scripting language Active Script 3.0 is fully object-oriented,which is more extensible,more readable,and has higher performance comparing to the old version.This paper uses AS 3.0 to develop the"sailor fishing"web game,and expounds the design idea from the functional analysis,the game process and the key technology.

words】flash game;AS3.0 technology;object-oriented;game development

彭婀娜,女,湖南攸县人,讲师,研究方向:计算机科学与技术。

猜你喜欢

游动水手子弹
球轴承用浪型保持架径向游动量的测量
小水手的歌
把手放进袋子里
三颗子弹
子弹VS防弹
Karma:让子弹飞一会儿
半盏——第七话:水手们
幸运的水手
子弹
父亲