手把手教你制作Flash游戏.docx

上传人:b****8 文档编号:23889857 上传时间:2023-05-21 格式:DOCX 页数:35 大小:571.48KB
下载 相关 举报
手把手教你制作Flash游戏.docx_第1页
第1页 / 共35页
手把手教你制作Flash游戏.docx_第2页
第2页 / 共35页
手把手教你制作Flash游戏.docx_第3页
第3页 / 共35页
手把手教你制作Flash游戏.docx_第4页
第4页 / 共35页
手把手教你制作Flash游戏.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

手把手教你制作Flash游戏.docx

《手把手教你制作Flash游戏.docx》由会员分享,可在线阅读,更多相关《手把手教你制作Flash游戏.docx(35页珍藏版)》请在冰豆网上搜索。

手把手教你制作Flash游戏.docx

手把手教你制作Flash游戏

手把手教你制作Flash游戏(火影篇)

最近累,虽然有很多朋友都在等勇者2,但我实在没心情开发。

闲着也是闲着,开一贴给刚刚踏上FLASH游戏开发的爱好者们写点东西。

老鸟就不用看了,呵呵,贻笑大方了。

FLASH游戏这东西吧,总入不了大流。

国内拿FLASH做美术方面的应用比较多,而传统的游戏程序员又把FLASH当小儿科,不屑搞这个,事实上开发FLASH游戏也赚不了钱,七七八八的原因加起来,就变成了没多少职业程序员来开发FLASH游戏,学校也不会培养学生深入学习开发FLASH,搞这块的人少,人少交流讨论的也少,正正规规的教材也少,当然优秀作品更少。

目前国内大部分的FLASH游戏开发爱好者没有好教材的指引,自己摸索着就上路了(NND,我也是这样开始的),开发流程和习惯都是各人一套,很多人因为没有接受正确的学习而走了很多歪路(MD,好像我也是)

于是乎,话题转回来,我就开一贴跟菜鸟们多交流吧……

LESSON1游戏制作前的准备

突然灵光一闪:

老子要做个XX类型游戏!

于是立马打开电脑,打开FLASH,找图片,建元件,F9一按,代码蹭蹭的打啊……结果做了一半做不下去了。

以上情况常常发生……

做游戏首先脑子里先要有整个游戏的规划,最好是拿笔画个流程简图,然后再下手。

游戏流程的规划是很重要的,我在做一个游戏游戏前,草稿纸上来来回回要打个半天的草稿才开工,我一直认为游戏的规划部

分是很难的,如果真等到全部想好了,做起来其实是个很轻松的过程,只是耗时间罢了。

理论知识多说没用……

我们不如来实践下,跟我一起做个简单的游戏吧……

吃金币游戏-策划(我在草稿纸头上写下以下几点)

基本描述:

1.天上掉宝物,地下小人物由自己控制,去接宝得分

2.时间限制30秒

写到这里,顺手画了张草图

画好草图,我继续在草稿纸上又写下详细的几处描述:

1.宝物分四种:

金币10、金币50、增加时间的宝物、瞬间获得屏幕所有金币的宝物

2.要有两个人能选,一个人物太无聊

3.人物样子不能太傻(这条请忽略)

4.最好来点技能~!

(晕--不是说简单游戏么……)

5.要能记录我最高得分,有点挑战性!

6.玩到后面最好难度慢慢增加,就让下落物品速度加快吧!

7.即使小游戏,音乐音效也应该有的

8.(占位中...)

写到这里,我又想了想,又画了张草图

大概想了下这个小游戏的运行过程

鉴于我这个人脑子不好使,我又一样样统计了下一共有多少东西。

见下图:

1.人物

2.宝物

3.时间显示的东西

4.分数显示的东西

5.选择人物还有游戏结束后历史高分的两个提示板

6.背景图片和音乐音效

好了,游戏不管大小,我基本动手干活前这些基本的流程都要走。

为的是明确整个游戏的过程,然后统计下有多少东西要做,然后一样样做呗。

接下来就是搜集要用到的素材。

我找了张背景图,找了两张火影的卡通人物:

鸣人和小李。

接下去就是先把要用到的动画元件做好。

然后就开始考虑程序部分(后面几讲重点)。

P.S.看到这里,有人要骂了,小样是不是发个半吊子帖子来骗分啊?

为了表明我不是骗子--...我今天把这个小东西做了下。

因为纯教学讲解用,所以只简单做了两个人物和几个道具,等大家学完后可自行扩充改写。

(为了写这个帖子我今天特意做的,没功劳也有点苦劳啊~)版主给点分升级啦~很多图我都传不上~

控制,键盘方向左右操作,上键小李长按是加速,鸣人是跳跃。

下节讲讲AS方面的开发布局,待续

我们讨论下AS的问题。

先不急于动手打代码,我们先要想好这代码怎么个写法,怎么个安排。

好,现在小鸟们排好队,一个个来回答,你准备怎么写:

10个小菜鸟9个会回答:

我X你的傻X~!

还能怎么写?

F9按了开始写啊……gotoandplay啊,onrelease啊,if啊……该写啥写啥……

咳咳,事实上,也没错。

游戏也能这么出来。

不过我个人推荐我们该融入点面向对象编程的概念。

啥?

NONONO……我不是要开始讲复杂的东西……

我尽量把话往简单了讲……

我们上讲统计过游戏大致那几个东西是吧?

我们现在就把那几个东西独立开来做。

用你听过的,就是分几个CLASS(类)来做。

比如,人物,我们就搞个人的CLASS,宝物,我们就搞个宝物的CLASS,和传统的F9按开一股脑的打代码不同,CLASS类文件是另外写的.AS文件,然后游戏主的.SWF主文件调用的。

来张图:

每个CLASS都会被绑定在对应的MC上

上节统计过的,游戏一共就那么几个MC,每人把自己对应的小蜜绑好合成一体,在舞台上一合成,就是个完整的能运作的游戏了\

这样的结构有什么好处?

1.清晰,修改起来方便,知道哪的问题上哪个地方改

2.CLASS封装性好,不受其它MC和CLASS的影响

3.因为2的原因,所以适合好几个人一起开发。

比如今天你要去谈恋爱,你就拉了隔壁阿三,告诉他要做个怎么样的CLASS,名称和哪几个变量以及实现的功能,然后阿三做好,你就拿来可以直接用了。

4.把整个游戏一个个零件拆开做,不容易犯错。

5.看上去比较专业,不懂行的一看,NND,搞的跟专业开发人员一样,拉风毙了

在具体讲解CLASS构造前,想花点篇幅帮小鸟们理解下CLASS是什么东东。

还是来举个例子,有一个机械战士的MC,这个MC里有机械战士完整的构造,手脚、身体、武器……

但这个机械战士仍然不能动,因为它只是一具机械,没有大脑程序告诉它该怎么走动,怎么攻击……

而我们做的“机械战士控制.as”的CLASS,绑定在这个战士身上。

这个CLASS可以看作为一个封闭的黑匣子,里面装载了指导机械人行动的程序,包括怎么移动、怎么攻击、怎么做事情A、怎么做事情B。

而这一切都是封闭在黑匣子里的,影响不到外界程序,外接程序也影响不到它。

是个独立的东西。

这个黑匣子可以装载到任何一个机械战士身上,任何一个机械战士躯体的MC一旦绑定上这个CLASS,就能立即行动起来。

而且我们可以给这个CLASS做个外界可以调用的接口。

就像黑匣子上装了个可以给外界摁的按钮,你摁一次它就发一次绝招。

象上一节说的,CLASS模式做游戏可以团队开发。

我可以让别人帮我做CLASS,做好我拿来用。

我不需要知道他代码怎么写的,我只需要知道这个CLASS能让这个机械人按照什么规则行动,有什么按钮可以让我摁。

封装性的好处由此显示出来了。

再闯关游戏里,经常出现比如画面上主角一人对N个敌人的场面。

这些敌人每个都可以绑定同一个CLASS。

就是说写了一个CLASS分别装载到N个实例化的MC中去,而不用每个敌人都各自写一段代码。

可能其中两个敌人的生命和攻击力不同。

这也很简单,在CLASS里做一个接收外部传入生命和攻击力两个参数的功能,在敌人MC绑定CLASS后,再传生命和攻击力两个变量的值到MC里即可。

不过要说明,CLASS并不是只能实例化在MC上,还可以装在例如Object之类的上面。

比如我们很常用的一个FLASH本来就有的CLASS:

SOUND

mySound=newSound()

mySound.attachSound("a.mp3")

mySound.start(0,1)

这里我们就可以看作Sound类实例化了在mySound的上,而attachSound和start都是Sound类的“按钮”,可以让外部操控这个装载了Sound类的mySound。

我们并不知道Sound这个CLASS内部代码是如何的,但我们知道按钮可以用来干什么,用的也不是很爽吗?

前面说了CLASS的基本应用,可能有鸟鸟们要问了,我做个function一样可以用啊,或者在MC里敲代码,跟你写CLASS一样。

那为什么还要写CLASS啊?

那下面我就来写点CLASS的另外个重要的特性-“继承”

先来个小例子:

隔壁阿三写了个类“机器人控制.as”,里面写了若干行的代码,包括“移动、跳跃”两个个功能。

我现在也想写个类“超级流氓机器人.as”,里面包括“移动、跳跃、攻击”三个功能。

和阿三写的类比较起来,“移动、跳跃”两个功能是一样的啦,我想写的类只多了个“攻击”功能~

于是可以偷懒了。

在我写的类“超级流氓机器人.as”第一行加句简单的代码,就可以把阿三写的类完全COPY过来。

(代码语法命令后面的课程会讲的)

然后我的“超级流氓机器人.as”文件里,内容就只有段写“攻击的代码”。

看到这里,鸟鸟们又要问了,为什么不直接ctrl+c然后ctrl+v把阿三写的类复制过来,然后在里面加?

1.别人写的代码,复杂的要死,反正我脑子转不过来,不想去分析别人的东西。

分析别人写的代码,痛苦的来~

2.日后我再要写个“移动、跳跃、翻滚”的代码,我不是还要再ctrl+c然后ctrl+v?

多麻烦!

3.假使我用ctrl+c然后ctrl+v的方法做了,但突然发现“移动”功能里有个错误要改……郁闷吧?

你要一个个.as文件改了。

而如果是继承的方法做的,你只要让阿三把他写的类修改了,你自己写的两个类就一点不需要改动了,因为“移动”部分的功能,是直接继承过来的嘛~

说到这里,顺带再提下,FLASH里我们经常也在用类,只是你感觉不到。

做游戏用到最多,同时也是FLASH里最重要的类,就是~~~~~~~~~“MovieClip类”!

鸟鸟们不知不觉的就一直在用MovieClip类,比如你有没有经常写:

mc.onEnterFrame..

onEnterFrame就是MovieClip类里的一个方法,只要是个MC(自动被绑上了MovieClip类),就都能用onEnterFrame。

现在回到第一节说的那个天上掉宝地下人物接的游戏。

人物有两个:

小李和鸣人

经过分析,这两个人物基本控制部分是一样的,然后就区别在两个人的各自的特殊技能不一样。

于是我们可以这么做:

1.先建个“人物基本控制.as”类

2.建个“小李.as”类,第一行一句代码继承“人物基本控制.as”类,然后在正文内容里写上小李特殊技能

3.建个“鸣人.as”类,第一行一句代码继承“人物基本控制.as”类,然后在正文内容里写上鸣人特殊技能

见图:

大家可以看到,“人物基本控制.as”类也是继承了MovieClip类,因为要用到MovieClip类里的功能嘛~比如人物移动要用到onEnterFrame,MC._x,MC._y这点功能。

类的继承,还可以覆盖继承过来类里的方法。

比如A类有move、jump、attack三个方法

我要写个B类,也包括这三个方法,但是attack这个方法和A类的attack有点不同,而move、jump这两个方法则和A类里的一模一样。

于是我们写B类,第一行先写句话继承了A类。

然后在正文里把attack方法重写一次,就自动覆盖掉了继承过来的A类的attack方法。

其它的方法就不用写了,因为直接继承过来了。

让我们来换个思路做上面那个例子。

直接写了“小李.as”类,然后让“鸣人.as”类继承小李类,正文里只需要把特殊技能方法重写遍就OK了。

见图:

看了那么多概念,小鸟们要想,咋还不教具体怎么写CLASS呢?

别急啊,下节里会简单的教些的。

其实我对这种死东西教学还是比较头大的,鸟鸟们也可以自己网上搜下具体CLASS撰写格式、规矩和变量、方法类型。

肯定比我教的要详细。

因为我在CLASS方面也只能算只比小鸟略微胖点点的中鸟啊,哈哈

本来不想写这节的,因为这节的内容很多书上或者网上资料都有,而且写的比我要详细正规得多。

但后来想想,还是写吧!

而且后面几节要结合接宝的范例游戏,具体分析它的几个CLASS,所以,还是用一节把CLASS的写法说一下。

可能我对CLASS的写法也不是很正规,有老鸟看了后,最好也能指点一下。

先来个CLASS基本的模式。

文件名:

Time_control.as

classTime_control{

   //第一部分:

声明本CLASS要用到的变量

   staticvara:

Number=2;

   privatevarb:

Number;

   privatevarc:

Number=1;       

   publicvard:

Number;

   //第二部分:

构造函数

   functionTime_control(){

       init();

   }

   //第三部分:

隐式设置-获取法

   publicfunctionset_d(sss:

Number):

Void{

       d=sss;

   }

   publicfunctionget_d():

Number{

       return(d);

   }

   //第四部分:

私有和公有方法

   privatefunctioninit(){

       //一般写点初始化的内容

   }   

   privatefunctionaa(){       

       

   }

       publicfunctionbb(){       

       

   }

}

如果是要继承类,比如继承MovieClip类,第一行就改写成

classTime_controlextendsMovieClip{

下面简单解释下各个部分(我最不擅长解释说明这类东西)

CLASS类都是以

class类名称{

   内容

}

的形式,而且类名称和文件名要相同。

CLASS的内容分四部分

∙第一部分

声明本CLASS所用到的变量,这里要提的是,和在SWF里定义变量不同。

SWF里你可以用比如a=1这种自动变量形式,而在CLASS里你必须写明a的类型是Number,再定义变量值是1

∙第二部分

是CLASS的构造函数,什么意思呢?

就是当CLASS的实例出现后,自动执行这个function里的内容,一般都是些初始化的内容。

function的名称要和CLASS类的名称一样哦~而且这里初始化一般都是用个init()函数,init函数具体在后面回自己定义。

为什么要这样而不直接把初始化内容写在构造函数内呢?

因为当继承其它类的时候,构造函数是不能继承的,还得自己再写一次,而init函数是可以继承的,于是……呵呵,懒人懒办法嘛~直接把内容写在构造函数里的话,每次继承就还要重写次,用自定义init函数的话,就可以偷懒咯~

∙第三部分

是定义隐式设置-获取的function,什么意思呢?

上节我们说过,class可以看作一个封闭的盒子,跟外界无关。

但有时候我们必须读取或者改变CLASS类内的某个变量。

这时候就必须借助隐式设置-获取的function。

只有定义后,外界才能读取和设置CLASS内的变量。

定义的方法就是比普通function多了get/set这个单词。

而且必须要指定返回变量类型,无需返回则用Void表示。

∙第四部分

就是写function咯~这个就不具体说了,function大家老写了

可能大家看到,class里比平时大家写的,多了private和public,还有static这三个词

啥意思捏?

简单简单的说下:

private与public定义的变量和方法都能在CLASS内一样使用,没啥区别

而不同的地方就是,public定义的变量和方法能够被外界读取设置和使用,而private则不能,只能在封闭的CLASS内使用。

比如publicvard:

Number=1设置了变量d是public型的

然后在第三部分写下:

publicfunctionset_d(sss:

Number):

Void{

       d=sss;

   }

publicfunctionget_d():

Number{

       return(d);

   }

当CLASS实例化在了一个MC后

trace(MC._d)就得到1

输入MC._d=2后,MC内的d就变成2啦~而private设定的变量,你从外部既不能读取也不能赋值。

自己仔细体会下

同理,例如:

publicfunction发绝招{

}

就像上几节图里那个封闭盒子上的发绝招按钮,实例化到MC后,就可以直接

MC.发绝招()

来让MC执行发绝招()这个function

而static定义的变量,怎么跟大家描述呢……它不存在于CLASS的实例化里。

而且static定义的变量,是被所有CLASS实例共享的。

还是来个例子吧:

舞台ATTACH个MC,绑定的ccc.as类。

类里有个static变量s=1。

ccc类里初始化函数init()里让s++,这时候s就等于2了是吧?

然后继续在舞台ATTACH个MC,绑定的ccc.as类,这个MC的s就直接等于2了。

然后它在初始化函数里同样执行了s++,这时候两个MC里的s都同时变成了3

这就是所有CLASS实例共享static变量。

怎么说呢,CLASS撰写方面,我自己也不是很行,可能还存在少许的理解误区或者缺少技巧经验。

希望老鸟也指导下。

关于这节,我建议新鸟鸟们最好自己再找点正规教材自己学习下。

单靠这节写的些鸟文,小鸟对CLASS还不能很好的认识。

正常。

所有的知识只有通过实战才能真正的理解。

在下节里,我会详细的开始教那个接宝游戏怎么做。

具体的代码怎么写。

CLASS怎么写怎么用。

手把手的教鸟们学做这个范例游戏。

搞了半天的鸟CLASS,我们又回到了做游戏的内容上来。

咱们学那么多知识,目的也只为了更好的来做游戏。

这个游戏吧,前面也有朋友说到了,根本不用CLASS,做个单个FLA文件F9按了猛打代码,然后MC里点开了东鸟点代码,西鸟点代码,也能完成。

没错,确实这样。

我自己相当长一段时间内也是不懂CLASS之流,只用一个FLA文件,代码全死敲里面,也做出不少洋洋得意自以为是的小游戏。

我自己本身就不是科班出身的鸟,当年差了十分没能进计算机系,错过了接受正规编程教育的大好光阴。

(不过事后发现世界是奇妙的,我做过几个单位从事正职编程的都不是计算机系毕业的)

但当小游戏逐渐变成大游戏后,一个FLA里,root里,MC里代码开始多起来,关系开始复杂起来,于是制作者头也开始大起来,直接影响到睡觉睡不好,饭也吃不好,肠胃不通,消化不良,上班没精神……

于是,就必须要正规的,能让脑子清醒的,能轻松分辨游戏里各类关系的开发方法。

再于是,我每天买瓶水,学习了CLASS方面的知识。

(日,学CLASS和买水有啥关系?

话题扯远了,让我们再次回到接宝上来。

一楼那个我做的简单范例SWF大家看过了没?

什么?

没?

赶快去下了,试着玩玩。

给你5分钟,玩好再继续往下看。

……(5分钟的等待)

好,试玩过了对吧?

我现在问你,要你分析游戏里的逻辑关系,你怎么分析?

给你5分钟思考。

……(5分钟的等待)

是不是:

天上不间断掉宝-当地下人物碰到宝,就获得相应的奖励。

时间到就结束游戏。

是这样的。

但我思考问题,是按:

1.游戏时画面上有几大元素?

(MC)

2.每个MC要实现什么功能?

从每个MC的角度来思考分析游戏的构成。

你也要习惯这样,因为我们以后要从MC的角度来编写CLASS,每类MC都会有个对应的CLASS类来告诉这个MC在游戏中该做什么。

各个MC拼合起来,就成了一个游戏。

简单游戏和复杂游戏的一个区别,就是游戏里元素多少,元素多了,逻辑复杂,元素少了,逻辑简单。

好,请鸟鸟们继续思考,接宝游戏里有几大元素(MC)?

它们各自要做点什么?

给你10分钟……

……(10分钟的等待)

见图:

公布答案:

1.人物

2.宝物

3.分数(右上角)

4.时间(左上角)

5.游戏总控制(包括选人、最后最高分显示)

每类各自要做的事情:

人物:

1.能够左右按键移动控制移动

2.移动范围限定(不能跑出屏幕吧?

3.按上键技能

4.一些初始化设定(刚开始出现的坐标,移动速度)

宝物:

1.按随机速度下落,落出屏幕消失

2.碰撞检测,是否碰到人物

3.碰到人物后产生加分、加时间等不同的效果

4.初始化设定(刚开始出现的坐标,移动速度)

分数:

1.显示分数

时间:

1.30秒倒计时,显示时间变化

2.到了0秒,通知‘游戏控制’执行‘结束游戏’的function

游戏控制:

很重要的部分,要控制协调以上几个元素之间的关系,以及游戏的过程。

集合了很多种function供调用

以下规整下包含的function

1.人物选择:

按照人物选择框的选择,attach人物MC到舞台(人物attach进来后,就会自动按照他自己的CLASS行动啦),同时调用‘掉宝控制’的function开始掉宝以及‘时间控制’里倒计时方法,开始30秒倒计时。

2.掉宝控制:

按照随机时间间隔,随机的attach宝物种类到舞台(一样~!

宝物attach进来后,就会自动按照他自己的CLASS行动)

3.金币消失:

这个funtion要在时间到0时被调用,作用是让屏幕上的金币原地消失

4.游戏结束:

这个function是被‘时间控制’里当时间=0的时候调用的,作用为判断比较当前得分和最高分,显示框出现显示最高分。

说了那么多,不知道大家思路跟不跟的上

按我说的仔细思考下吧

要直到能理解我说的,才能继续看下一小节。

下一小节开始,我要一个个放出各个CLASS的具体代码了,并进行详解,请时刻关注哦!

附:

编写好的CLASS怎么关联到MC?

就拿上节例子Time_control.as来说吧,要关联到库里的元件'时间'

老鼠右击元件'时间',然后……

见图:

如果是自己拖到舞台上,“第一帧导出”就不选

如果是attach上舞台,则就要选哦

范例接宝游戏中人物类的CLASS讲解

首先请下载源文件:

CLASS.rar

下载好,打开一看,如下:

∙一个FLA主文件:

o run_game.fla

∙三个目录:

oplayer

oitems

ogame

我把.as类文件分门别类的存放,这样看上去清晰,更重要的是别人看了会觉得我很专业。

∙目录player里有:

oPlayer_1.as 

oPlayer_2.as

∙目录items里有:

oJin.as  

oBao1.as  

o Bao2.as

∙目录game里有:

oGame_control.as

oScore_view.as

oTime_control.as

.as具体意义看文件名就应该能知道,这里要说的是,一般默认的规则,放CLASS目录用小写字母命名,.as的类文件名的首字母用大写

这节详细讲下人物类的CLASS,首先是Player_1.as,人物小李的类

首先去源文件里点进人物1的MC,看下结构。

由两帧组成,一是“stand”,二是“run”

人物上面有一层有个圆形的MC,我把它命名为hit,靠这个mc来做碰撞检测。

金币里面也有这个名叫hit的MC,我判断人物和金币是不是相碰是用这个语句的:

金币MC.hit.hitTest(人物MC.hit)

传统碰撞检测都这么做。

又开始扯话题了,马上拉回来

现在拿出Player_1.as的代码

classplayer.Player_1extendsMovieClip{

   privatevarhit:

MovieClip;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 设计艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1