本帖最后由 D5Power 于 2010-10-2 23:13 编辑 注:本系列教程每周一篇,旨在引导刚刚接触FLASH的新手通过实例进行游戏开发的学习。在过程中逐步说明涉及到的类及对应的使用方法。从一个光秃秃的方块开始,根据不同的控制方式、玩法产生不同的分支,最终完善成一个个可玩的游戏。希望对各位入门的朋友有所帮助!在教程涉及的各种处理方法,可能不够完善,也希望各位高手指正:) 转载请注名来源于天地会。 第一篇 响应键盘事件的方块 准备工作:FLASH CS3/4/5,FlashDevelop(http://www.flashdevelop.org/community/viewforum.php?f=11) 开发目标:实现一个受键盘控制的方块 相关API:Sprite,KeyboradEvent 我们即将开始构建一个游戏世界…… 任何属于这个世界的物体,我们都叫它游戏对象(gameObject)。它是游戏的基本元素,所有的一切都是从它衍生而来。有的游戏对象可以被我们操作,因此,我们需要分配给它一个控制器(controller),并通过这个装置来控制它。我们一次不可能看遍全部世界,所以,我们必须有一个舞台(gameScene),让我们想看到的游戏对象来到这个舞台上表演。所有的一切。都通过这个舞台开始…… 首先,做一下准备工作: 首先打开FlashDevelop,新建一个项目。 选择FLASH IDE项目,选择一个保存目录,并选择一个你喜欢的名字。 在项目名上点右键,选择Add -> New Class,输入文件名Main,选择base Class后面的Browse按钮,输入Sprite 这样,我们就建立了一个继承自Sprite类的对象Main。Sprite是FLASH的一个基本显示元素,它没有时间轴的概念。 打开FLASH CS3,新建一个ActionScript 3.0文件,并把它保存到刚才建立的项目的目录中。在属性栏里,把帧频改成30,文档类输入Main。 这样,我们就建立了一个可以由Main.as控制的FLASH文件。把刚才生成的Main.as改成像下面这样:
看到输出框里出现的输出,说明程序已经可以运行了。trace是FLASH中的消息输出命令,我们在今后的开发过程中会经常使用的。至此,准备工作完成。开始我们的创建之旅吧。 首先来建立游戏时间里的“亚当”——gameObject。在我们的项目里新建文件夹D5Power(起个自己喜欢的名字),并在D5Power下面再建一个文件夹Objects,最后,在Ojbects里Add一个New Class,输入文件名gameObject,同样,base class选择Sprite。建立完成后,我们的项目看起来应该像这样了: 在FlashDevelop给我们生成的代码中,我们看到了package D5Power.Objects 这样的字眼。package即是包,我们的源代码可以存放在不同的包中,这样可以保持代码的结构清晰。包的名字实际上就是对应目录的名字。如package D5Power.Objects 这样,我们就可以知道gameObject文件是保存在D5Power/Objects/这个目录下面,如果package后面没有任何内容(比如我们刚才建立的Main),那么这个文件就是在项目的默认包(源代码的顶级目录)中。不同层级的包之间的访问,必须通过improt进行包含,而同级,以及访问默认包内的文件,是不需要的。这个我们以后会再继续详细的说明 回来考虑一下我们的“亚当”——gameObject,它是最基础的元素,所以,我们只给他定义最简单的可以做的事情,首先,他可以做一些事(至于做什么,我们先不考虑),另外,他会死亡。既然他可以产生在这个游戏世界里,那么他就必须可以从这个世界里消失的无影无踪:
我们决定教他如何行走:
var FLASH中定义变量用的前缀,比如var num:int = 5;定义一个整型变量num,默认值为5 function FLASH中定义函数的前缀,比如 function test():void{} 定义一个名为test的函数,没有返回值 public 这个关键字之后的定义是公有的,可以被外部的类访问。比如,大家都知道你的名字,所以你的名字是public的。 private 这个关键字之后的定义是完全私有的,只能被类自己访问。比如,你银行的密码只有你自己知道,所以他是private的。 protected 这个关键字之后的定义,是私有的,但家族成员可以访问。比如,你儿子知道你屁股上有一颗痣,其他人不知道。。。笑,所以这个痣是protected的 override 覆盖父级类的定义 set 在上例代码中,可以通过某actionObject.direction这样来访问这个函数,而不是.direction(),和它类似的还有get关键字。你可以用他们来生成一个只读或只写的“变量” 现在,“亚当的儿子”可以行走了。但是,我们不知道怎样才能通知他走,怎样走。我们必须有一个控制他的方法,让他来听从我们的指挥。因为,我们必须创建一个控制器来控制它。在这之前,我们要学习一些操作这个世界的方法和技巧(上帝也需要学习么,呵呵) |
首先,我们必须能在任何的地方都可以访问到主场景的FLASH舞台(Stage,你可以把他理解成我们在FLASH CS里可以看到的那个白白的工作区,呵呵).这样方便我们的操作。刚才我们说过,不管任何一个包,都可以访问到默认包里的东西。因此,我们在默认包里建立一个全局都可以访问的类Global,并用它来存放一些需要全局调用的东西:
再来看一下键盘事件触发的两个函数。因为我们知道,这个按键控制器所控制的必然是ActionObject,因此,我们可以把控制器的控制目标转换成ActionObject,使用as来进行。之后,就可以更方便的控制目标了。可以看到,我们分别在onKeyDown函数里修改了ActionObject的行走方向,而在onKeyUp函数中恢复行走方向为0.结合前面的代码,当ActionObject的行走方向不为0的时候,它将根据不同的方向做出判断,并移动向不同的方向。 这里的e.KeyCode是键盘事件发送过来的,值即是按下的按键的ASCII码,我们通过它来确定键盘上被按下的是哪几个键,37-40分别是键盘上下左右四个方向键的键值。在onKeyUp中,我们利用数组做了一次判断。如果按下的按键键值在这四个数字组成的数组中,则恢复控制目标的移动方向为0 有了控制器,我们必须有方法把控制器安装到ActionObject中,于是,我们对代码做了如下的修改:
在D5Power下新建Scene目录,并建立一个继承自Sprite类的对象gameScene,来作为游戏场景的基类(如果你喜欢听“亚当”的话,他们是一个意思)。代码如下:
最后的工作:画一个方块,并选中它,按F8键将他转换成一个组件,并按下图配置 我们在这里声明了,这个方框将是一个ActionObject类,转换为组件后,即可把他从舞台上删除掉了,因为我们要用程序来生成他。接下来修改最初的Main.as
![]() 源代码如下: [attach]34715[/attach] 在下一篇的教程里,我们将向场景中增加其他的方框,并让他们随机的在场景中移动。 |
-
Teach.rar (11.72 KB)
最后,来看一下这一篇文章中涉及到的程序的大体结构:
对于真正的初学者来讲,这样的结构可能稍稍复杂了一些,但是,清晰的结构可能会帮助你的程序易于维护和扩展。欢迎各位感兴趣的朋友进行讨论。有任何问题都可以在论坛中提出,我会进行解答,来帮助大家理解。