0.绪论
对Flash游戏制作者来说,这是一个非常好的时期。到目前为止,还没有一款软件比这更好的来设计中小型游戏了。
Flash CS3 Professional对我们来说,是快速的,强大的和容易掌握的。其中最关键的就是,Flash最新发布的版本有着强大的ActionScript 3.0编程语言。
ActionScript1.0和2.0让Flash制作者感到太伤心了,在程序的调试过程中,经常会出现一些Bugs,导致不能快速的制作出自己的作品。
相对而言,ActionScript 3.0编程语言会让你感到非同寻常。在使用中,你会发现它能够快速地,非常容易的制作出自己想象中的作品。
最后,就让这本书带你走进Flash游戏的世界中吧,希望通过本书的学习,它可以带给你更多的快乐。
0.1  Flash游戏的发展
1995年10月,对我这个游戏设计师来说,是非常激动的。因为Macromedia刚刚发布了Shockwave播放器,这样就可以把自己制作出来的作品发布到网络上了。
从最初的Shockwave播放器发布之后,还有两次比较激动人心的就是,Shockwave 3D和ActionScript3.0的发布。
虽然Flash游戏环绕在我们周围,但如果和Shockwave游戏比起来,它就比较逊了,因为Shockwave软件在3D方面是非常快速和强大的。
不管怎样,我们现在有了ActionScript3.0,Flash就会变得和Shockwave一样强大。例如,Flash 9播放器已经占有了全球80%的桌面电脑。截至到现在,几乎全部安装Flash 8播放器的用户已经将该软件更新到了Flash 9的版本,这对我们Flash游戏制作者来说,无非有莫大的帮助。
Flash 9播放器还可以应用于Linux系统,网络电视窗口,游戏控制台等多方面软件,现在,我们拥有了Flash 9player和ActionScript 3.0以后,就可以轻便地来做这些事情了。
你可以开发双方独立的或者基于网络版本的Flash游戏,当然,还还可以利用第三方的软件来扩展你的Flash功能,以便编译出更强壮的代码
严守纪律歌歌词总之,对制作中小型的游戏来说,ActionScript 3.0的功能是非常强大和实用的。
0.2本书为谁而写
本书适用于使用Flash制作游戏的任何人,读者可以根据自身情况选择不同的方式来用好此书:
对Flash绘图和编程都没有学过的新手来说,最好先学习一些基本的编程语法再看。当然,如果你对Flash有浓厚的兴趣,也可以直接用此书来学习ActionScript 3.0;
如果你以前使用的是ActionScript 1.0或者2.0,你也可以用此书快速的学会ActionScript 3.0。不过,你应该尽可能的把以前ActionScript版本的编程方式忘掉。确切地来说,ActionScript 3.0与前期的1.0和2.0的版本已经有很大不同。我自己认为它是一门全新的语言。
对于有些动画和编程基础的人来说,如果想进一步学习游戏编程,本书是再适合不过了;
如果你
没有学过编程,但喜欢绘图,插图,或者动画。你可以用本书的例子作为素材。也就是说,你可以把本书中源文件拿出来用到你自己制作的游戏中去;
同样的,如果你是优秀的ActionScript 3.0程序师,本书也可以作为给你提供的一个代码库,你可以把它运用到自己设计的游戏中去。
0.3        使用本书需要具备的知识
万圣节是什么节日是什么意思
除了正确地使用软件之外,对大多数读者来说,如果想从本书中获取更多的知识,还需要对Flash编程基本知识做些准备。
必备知识
对大多数读者来说,您应该对Flash CS3的运行环境很熟悉了。如果你是一位新的Flash用户,可以在Flash CS3的软件中打开用户指导说明,或者选择Flash帮助或按F1键查看帮助。另外,你也可以买本初级者的书翻阅或者在网上直接观看在线教程。
本书是分章节讲授的,各章节间没有太大的连贯性。如果你想应用本书范例中代码的话。你只要有些编程基础就可以了,比如ActionScript1.0或者2.0,JavaScript,Java,Lingo,Perl,PHP,C++等等任何结构化设计语言中的一样就可以。只要你稍微对循环,条件语句和函数等知识有些了解,也就很容易理解ActionScript 3.0语言了。在第一章中"Flash和ActionScript 3.0的应用"就概括了这些基本的语法。
如果你是一位程序员,以前没有使用过Flash软件的话,首先应该阅读一下Flash用户指南中关于绘图和编程的基础部分。
软件应用
当然,学习本书需要用到Flash CS3 Professional或者更新的Flash 8 Studio,本书不适用于之前Flash版本的用户。
2022两会开始时间和结束时间
Flash CS3在Windows和Mac系统上使用效果是一样的,本书中的屏幕截图取自Mac系统中的Flash程序,与Windows系统中Flash的截图应该是一致的。
Flash将来的版本很有可能是ActionScript 3.0编程语言的延续,或许一些菜单选项和快捷键要发生变化,但你仍然能够使用本书。这时,你要考虑在发布文档时设置成Flash 9播放器和ActionScript3.0,以确保更大的兼容性。
源文件
如果你需要本书的源文件,请看下面的怎样获取源文件的说明。
0.4        在你的游戏中如何使用示例
本书包含16个完整的游戏,其中也包括一些经典的游戏,例如:match three,asilde-scrolling platform游戏和word search。经常有人这样问我:"能够把这些游戏运用到自己的作品中呢?"
答案就是,当然了,你可以把这些游戏都修改成自己的,例如,你可以改变里面的图形、游戏的开始或其他内容等部分都可以。但是本书不提倡把这些游戏或者源代码清单原封不动的发布或者复制。
当你在你的方案中用这些游戏作品时,不要直接复制过去,这样是不专业的,在下面的网站中可以到答案flashgameu
如果
你仅使用其中的一部分代码,或者一个小游戏作为某个方案的框架,这无不可。
总之,要正确的了解这些常识和惯例,谢谢。
0.5        你在这本书中可以学到什么
第一章,"Flash和ActionScript 3.0的应用",主要介绍了ActionScript 3.0和一些基本的概念,如游戏编程策略,游戏清单等,这些可以帮助你在Flash CS3中更好地制作游戏。
第二章,"ActionScript游戏元素",呈献給大家一些函数的代码片段,例如创建文本域,绘制图形,播放声音等。这些在代码库中都是非常有用的,也始终贯穿于本书当中。
第三章至第十二章,每一章都包括一个或多个完整的游戏,书中正文的每一章都有游戏代码供你使用,或者你也可以用本书提供的源文件和代码。
第三章,"基本游戏结构:A Matching Game",这个与本书其他的游戏有些不同。它包括完成游戏前怎样检查代码,设计一个完整的游戏需要哪些步骤等说明。
其余章节大部分在开始制作游戏之前都包含一个特定的主题,例如:在第四章中就以"数组和数据对象"开始讲解的。
但是,本书所介绍的内容远远不止书本上这些,在线还可以获取更多的知识。
0.6        关于FlashGameU网站
这个FlashGameU网站可以说是这本书的伙伴,在这个网站上可以到这个源文件,补充资料以及新的内容,并设有Flash发展论坛和作者的Blog等。
本书的源文件是按章节划分的,在包内部还更进一步的对每个小游戏打包,在网站主页上有链接可以直接下载。
在网站上,你能够看到作者的Blog,如果你对本书有什么建议或者意见,或者有关于Flash游戏发展存在的问题,可以直接在论坛上留言或者通过作者的Blog联系。
1.1        ActionScript 3.0是什么
ActionScript3.0是在2006年发布Flex 2时提出来的,Flex允许开发者创建的Flash Player程序和Flash一样。但是,Flash却给我们提供了更加直观的界面,因此它就更适合用作游戏开发。
ActionScript是在Flash4发布的时候提出来的,当时的名称就叫做ActionScript,他的主要能是用来控制帧的跳转和鼠标,键盘的交互。直到发布Flash5之后,ActionScript才正式地作为ActionScript1.0使用,但是它的发展速度相当快,到了Flash MX2004(Flash 7),就引进了ActionScript2.0,它遵循ECMA标准,在面向对象编程方面,它开始变得逐步强大。像应用于浏览器的JavaScript,也是基于ECMA标准的。
注:Flash 9 播放器内部建有2套虚拟机,AVM1用来执行ActionScript1.0和2.0代码,AVM2用来执行ActionScript3.0代码,但是AVM2的速度要比AVM1快得多。
可以说ActionScript3.0最近几年已经发展到顶点了。Flash每个版本的发布,大家都会把它推到极限。现在,我们已经有了一个优
秀的开发环境来制作我们的2D游戏了,你将会体会到用一小段代码就可以让游戏运行起来的奥妙。
1.2创建一个简单的脚本程序
首先,打开Flash应用程序,选择"文件"->"新建",会出现一个文档窗口,然后,选择第一项"Flas件(ActionScript3.0)",点击"确定",软件会自动生成一个"未命名-1"的空白文档。
可以看到,在该文档顶部有一个时间轴,还有帧数,你看到帧数量的多少取决于Flash软件显示窗口的
大小。在Flash绘图时需要用到很多帧,但对于我们游戏制作者来说,用少数的几帧就能实现效果了。
中元节吃什么食物时间轴可以有一层或者多层,在新建文档的窗口中默认自动打开一层,名称为"图层一",在第一帧你可以看到,有个空心小圆圈的标志,它就表示该帧为空白关键帧。
注:关键帧是一个动画术语,在Flash动画制作中会经常用到,它的作用就是定义在某一个时间点上元素的状态和参数的变化。例如,选中时间轴的第1帧,在舞台的左端放置一个影片剪辑,然后在第9帧插入一个关键帧,并把该影片剪辑移动到舞台的右端,然后在第1帧至第9帧的任一帧点击鼠标右键创建补间动画,然后选择菜单"控制"->"测试影片",发现该影片剪辑已经能够在舞台上运动了。对我们游戏编程者来说,我们不会用关键帧来做动画,需要的只是在关键帧时间点上放置游戏中需要的"说明","播放","游戏结束"等物件而已。
你还可以在任何一层的任意关键帧输入自己的脚本代码,具体操作是选中这个关键帧,点击Flash菜单"窗口"->"动作"或者按【F9】键即可打开脚本编辑区输入自己的代码。
在脚本编辑区的上部,有可以实现很多功能的控制选项,例如可以对代码进行格式套用等。但是,我们不准备详细介绍这些控制选项,因为后面写出的代码大部分都在外部类中。
下面,就让我们来创建一个简单的Hello World程序吧,在脚本编辑区输入以下代码:
trace("Hello World");
好了,就是这么简单,现在你已经创建了第一个AS3.0的程序。来测试一下吧,选择"控制"->"测试影片"或者按【Ctrl】+回车键。如果你没有创建自己的Flash影片,可以直接打开HelloWorld1.fla文件进行测试。周立波是真的吗
现在,来看一下输出面板,在窗口的左上角你会看到一行输出了"Hello World",但是它只用于在Flash 9中测试影片,它不会显示在舞台上,如果想显示在舞台上的话,我们还需要进一步做更多些的工作。
创建可视对象
如果想让"Hello World"在影片中能够看到的话,我们用3行代码就能够实现了。
第一行需要创建一个文本域显示在屏幕上,她的作用是用来存放文本的容器;
第二行把该段文本存放在文本域内就可以了;
第三行是把这个文本域添加到舞台上,舞台上影片的显示区域,你可以在舞台上布置自己的元件,在测试影片时就能够看到了。
显示对象,在AS3.0中实际上就是一个能够看得见的元素,他可以是文本区域,图形,按钮,或者像弹出菜单式的界面。显示对象里面还可以包含其他的显示对象,例如,在国际象棋游戏中,一个显示对象会包含所有的部分,棋盘是底部的一个显示对象,舞台也是一个显示对象。
下面给出这三行代码,可以把它粘帖到第1帧中代替以前的那一行代码:
var myText:TextField=new TextField();
<="Hello World";
addChild(myText);
首先,先创建了一个TextField类型的变量,然后把"Hello World"赋值给这个变量,最后在把它添加到舞台上就完成任务了。
注:var是一个关键字,用来声明变量,变量的数据类型写在冒号的后面,如果要赋值的话,值得数据类型必须要和数据类型一致。
然后,选择控制,测试影片,你就能够在影片的左上部发现trace()出来的结果。
因为我们没有设置文本的任何格式,所以才会在影片的左上部出现软件默认的设置值。随着我们学习的深入,我们还可以设置文本的位置,大小,字体等格式。
创建一个AS3.0类文件
如果我们没有特别需求的话,不会在时间轴上写代码,而是在大多数时候,把代码都写到类文件中。
下面,就让我们用外部类建立一个Hello World程序吧^_^
首先,选择"文件"->"新建"->"ActionScript 文件",点击确定后创建一个脚本文件。我们可以看到,该文件与fla文件有很大不同,他没有时间轴和舞台工作区了,整个界面都是脚本编辑区域。
下面,我们尝试着用类文件写这个程序,你也可以先打开源文件看一下这个格式:
代码如下:
package
{
import flash.display.MovieClip;
TextField
/**
* ...
* @author ☆璀璨星晨☆
*/
public class DebugExample extends MovieClip
{
public function DebugExample()
{
for (var i:int = 0; i < 10; i++ ) {
shouNumber(i)
}
trace("循环体外")
}
private function shouNumber(whichNum:int):void
{
var myText:TextField = new TextField()
姜胜允< = String(whichNum)
myText.y = whichNum * 20
addChild(myText)
}
}
}
首先,类(Class)的声明要写在包(package)内才行,然后,才能根据程序的需要定义相关的内容。在这个类文件中,我们需要创建一个文