flash课程设计Word下载.docx
- 文档编号:607014
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:26
- 大小:1.55MB
flash课程设计Word下载.docx
《flash课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《flash课程设计Word下载.docx(26页珍藏版)》请在冰点文库上搜索。
注:
按优(90-100分)、良(80-89分)、中(70-79分)、及格(60-69分)、不及格(60分以下)五级评定成绩。
指导教师:
李红斌
武汉科技大学
课程设计名称:
班级:
组长:
成员:
【实验目的】
建立帧、元件、实例、场景、库、舞台、时间轴、图层、属性面板等概念的认识。
了解和掌握Flash动画中的形变动画、位移动画、逐帧动画。
了解和掌握Flash动画中的引导线动画、遮罩动画。
掌握动画测试的基本方法。
掌握用ActionScript进行Flash简单编程。
【实验内容】
吃金币游戏-策划
做游戏首先脑子里先要有整个游戏的规划,拿笔画个流程简图,然后再下手。
游戏流程的规划是很重要的,做一个游戏前,草稿纸上来来回回要打个半天的草稿才开工,我一直认为游戏的规划部分是很难的,如果真等到全部想好了,做起来其实是个很轻松的过程,只是耗时间罢了。
基本描述:
1.天上掉宝物,地下小人物由自己控制,去接宝得分。
2.时间限制30秒。
基本描述完后,我继续在草稿纸上又写下详细的几处描述:
1.宝物分四种:
金币10、金币50、增加时间的宝物、瞬间获得屏幕所有金币的宝物。
2.要有两个人能选,一个人物太无聊。
3.最好来点技能!
4.要能记录我最高得分,有点挑战性!
5.玩到后面最好难度慢慢增加,就让下落物品速度加快吧!
6.音乐音效也应该有的。
大概想了下这个小游戏的运行过程:
开始画面选择人物→人物出现,开始30秒计时,天上开始掉宝→游戏中右上角几分→时间到后画面宝物消失弹出历史最高分→按按钮重新开始
统计了下一共有多少东西:
人物、宝物、时间显示、分数显示、选择人物还有游戏结束后历史高分的两个提示板、背景图片和音乐音效。
游戏不管大小,按照流程走。
为的是明确整个游戏的过程,然后统计下有多少东西要做,然后一样样做。
接下来就是搜集要用到的素材。
我找了张背景图,找了两张火影的卡通人物:
鸣人和小李。
接下去就是先把要用到的动画元件做好。
然后就开始考虑程序部分。
先讨论下AS的问题。
先不急于动手打代码,我们先要想好这代码怎么个写法,怎么安排。
我们用点面向对象编程的概念。
把那几个东西独立开来做,就是分几个CLASS(类)来做。
比如,人物,我们就搞个人的CLASS,宝物,我们就搞个宝物的CLASS,和传统的F9按开一股脑的打代码不同,CLASS类文件是另外写的.AS文件,然后游戏主的.SWF主文件调用的。
每个CLASS都会被绑定在对应的MC上
游戏一共就那么几个MC,每人把自己对应的MC绑好合成一体,在舞台上一合成,就是个完整的能运作的游戏了。
这样的结构有什么好处?
清晰,修改起来方便,知道哪的问题上哪个地方改。
CLASS封装性好,不受其它MC和CLASS的影响。
适合好几个人一起开发。
把整个游戏一个个零件拆开做,不容易犯错。
人物有两个:
小李和鸣人
经过分析,这两个人物基本控制部分是一样的,然后就区别在两个人的各自的特殊技能不一样。
于是我们可以这么做:
先建个“人物基本控制.as”类。
建个“小李.as”类,第一行一句代码继承“人物基本控制.as”类,然后在正文内容里写上小李特殊技能。
建个“鸣人.as”类,第一行一句代码继承“人物基本控制.as”类,然后在正文内容里写上鸣人特殊技能。
“人物基本控制.as”类也是继承了MovieClip类,因为要用到MovieClip类里的功能嘛~比如人物移动要用到onEnterFrame,MC._x,MC._y这点功能。
类的继承,还可以覆盖继承过来类里的方法。
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。
当CLASS实例化在了一个MC后,trace(MC._d)就得到1,输入MC._d=2后,MC内的d就变成2,而private设定的变量,你从外部既不能读取也不能赋值。
游戏时画面上的几大元素(MC):
1、人物2、宝物3、分数(右上角)4、时间(左上角)5、游戏总控制(包括选人、最后最高分显示)。
每个MC要实现的功能:
人物:
1.能够左右按键移动控制移动2.移动范围限定(不能跑出屏幕吧?
)3.按上键技能4.一些初始化设定(刚开始出现的坐标,移动速度)。
宝物:
1.按随机速度下落,落出屏幕消失2.碰撞检测,是否碰到人物3.碰到人物后产生加分、加时间等不同的效果4.初始化设定(刚开始出现的坐标,移动速度)。
分数:
显示分数。
时间:
1.30秒倒计时,显示时间变化2.到了0秒,通知‘游戏控制’执行‘结束游戏’的function。
游戏控制:
要控制协调以上几个元素之间的关系,以及游戏的过程。
人物选择:
按照人物选择框的选择,attach人物MC到舞台(人物attach进来后,就会自动按照他自己的CLASS行动啦),同时调用‘掉宝控制’的function开始掉宝以及‘时间控制’里倒计时方法,开始30秒倒计时。
掉宝控制:
按照随机时间间隔,随机的attach宝物种类到舞台(一样~!
宝物attach进来后,就会自动按照他自己的CLASS行动)。
金币消失:
这个funtion要在时间到0时被调用,作用是让屏幕上的金币原地消失。
游戏结束:
这个function是被‘时间控制’里当时间=0的时候调用的,作用为判断比较当前得分和最高分,显示框出现显示最高分。
就拿Time_control.as来说明,要关联到库里的元件'
时间'
:
如果是自己拖到舞台上,“第一帧导出”就不选,如果是attach上舞台,则要选。
接宝游戏中人物类的CLASS 文件:
一个FLA主文件:
run_game.fla
三个目录:
player items game
目录player里有:
Player_1.as Player_2.as
目录items里有:
Jin.as Bao1.as Bao2.as
目录game里有:
Game_control.as Score_view.as Time_control.as
人物类的CLASS,首先是Player_1.as,人物小李的类。
由两帧组成,一是“stand”,二是“run”。
人物上面有一层有个MC(hit),靠这个mc来做碰撞检测。
金币里面也有这个名叫hit的MC,判断人物和金币是不是相碰是用这个语句的:
金币MC.hit.hitTest(人物MC.hit)。
补充个游戏里的结构:
_root下有三个空MC:
pl,item和xs
pl这个空MC是用来attach人物的。
item这个空MC是用来attach宝物的。
xs这个MC是用来attach显示得分的。
为什么要这么做呢?
因为管理方便。
Player_1.as的代码
classplayer.Player_1extendsMovieClip{
privatevarhit:
MovieClip;
//人物MC里出现的东西都要声明,hit这个MC也不例外
publicvarspeed:
Number;
//这个是人物移动的速度
//构造函数
functionPlayer_1(){
init();
//初始化的人物打包在init()里了
}
//隐式设置-获取法
publicfunctionset_speed(sss:
Number):
Void{
speed=sss;
}//可供外界用MC._speed=X修改speed的数值
publicfunctionget_speed():
Number{
return(speed);
}//可供外界读取speed的数值
//私-公有方法
//初始化方法
privatefunctioninit(){
_y=310;
_x=300;
//人物来到舞台后的初始位置
speed=6;
//移动速度
onEnterFrame=Move;
//人物来到舞台后就开始onEnterFrame,内容见Move这个function
}//人物移动
privatefunctionMove(){
if(Key.isDown(37)){
_xscale=-100;
_x-=speed;
this.gotoAndStop("
run"
);
}elseif(Key.isDown(39)){
_xscale=100;
_x+=speed;
}else{
stand"
}
//以上是左右键的定义
if(Key.isDown(38)){
speed=12;
speed=6;
//以上是上键的定义,按着后速度就加倍
range();
//范围定义,内容见下面
//限定移动范围
privatefunctionrange(){
if(_x>
540){
_x=540;
if(_x<
10){
_x=10;
}//不让人物出界
}
Player_2.as的代码
classplayer.Player_2extendsplayer.Player_1{
//继承了player.Player_1类,所以只需要把两者间唯一不同的Move函数重写次就可以啦~当然构造函数还是要的
functionPlayer_2(){
init();
}
//人物2的Move函数
privatefunctionMove(){
if(Key.isDown(37)){
_xscale=-100;
_x-=speed;
if(_currentframe!
=3){
gotoAndStop("
}
}elseif(Key.isDown(39)){
_xscale=100;
_x+=speed;
}else{
}
//
if(Key.isDown(38)){
gotoAndStop("
jump"
range();
金币10和50共用的CLASS
classitems.JinextendsMovieClip{
staticvarbasic_speed:
Number=3;
//下落基础速度
publicvarscore:
Number=10;
//得分
//下落速度
//声明碰撞检测的MC
privatevardepth:
//当宝物被人物获得,显示得分的MC的深度
//---构造函数---
functionJin(){
//隐式设置-获取方法
publicfunctionset_score(kkk:
score=kkk;
}//得分10还是50,传入这个参数就能解决
publicfunction_bspeed(){
basic_speed=3;
trace(basic_speed)
}//这个要说明下,静态变量basic_speed每实例化一个MC都会自我增加,所以基础速度越来越快。
这个方法是让basic_speed变回原始的3。
用于每回合开始时初始化使用。
}//共有-私有方法
_x=50+random(450);
_y=-15;
speed=basic_speed+random(50)/10;
//下落速度是由基础速度+随机增量
basic_speed+=0.03
//trace(basic_speed)
_y+=speed;
if(_y>
380){
this.removeMovieClip();
/////////////////////////////////
if(hit.hitTest(_root.pl.player.hit)){
getItem();
/////////////////////////////////碰撞检测哦~
publicfunctiongetItem(){
_root.music_control.snd("
jin"
//声音控制,以后会讲到
_root.score+=score;
depth=_root.xs.getNextHighestDepth();
vara:
MovieClip=_root.xs.attachMovie("
getScore"
"
+depth,depth++);
//ATTACH显示得分的MC
a.aaa.score="
+"
+score;
a._x=_x;
a._y=_y;
this.removeMovieClip();
两个宝物的CLASS,继承了金币的类,只不过改写了被人物吃到后的效果
爱心
classitems.Bao1extendsitems.Jin{
publicfunctiongetItem(){
bao"
TIME"
;
////////
_root.time_c._time+=8;
///////调时间控制类的public方法,后面会讲到
五角星
classitems.Bao2extendsitems.Jin{
Number=30;
//_root.score+=score
///////
for(variin_root.item){
if(_root.item._name.substr(0,3)!
="
){
_root.item.getItem();
}
///////
时间控制类
classgame.Time_controlextendsMovieClip{
privatevart:
Number
publicvartime:
//------------------------------------------
/*
functionTime_control(){
init()
复制代码
*/这段被注销掉了,因为我不要它一出现在舞台就开始倒计时。
什么时候倒计时,游戏控制类会给本类发出命令(调用本类中的Go()的function)
//-------------------------------------------
publicfunctionset_time(ttt:
Void{
time=ttt
publicfunctionget_time():
Number{
return(time)
//===========================================
privatefunctionTimeGo(){
t++
if(t%30==0)time--
if(time==0){
deleteonEnterFrame
_root.game_c.endGame()
}//倒计时代码,当时间=0,通知游戏控制类作出endGame()的行为。
publicfunctionGo(){
t=1
time=30
onEnterFrame=TimeGo
}//初始化,并开始倒计时
游戏控制类Game_control.as
控制游戏:
1.先初始化游戏参数,然后让选人框可见,让玩家选人。
2.玩家选好人,它就把人物attach到舞台上,同时通知‘时间控制类’可以30秒倒计时了,又同时开始在天上撒金币和宝物。
3.‘时间控制类’显示时间到0后,马上又来通知游戏,时间到0了
4.时间显示到0后,停止撒金币,让画面上已有的金币宝物全部消失,同时一番比较后显示出你的历史最高分,同时提供你个重新游戏的按钮
5.按重新游戏,游戏就回到第1步
classgame.Game_controlextendsMovieClip{
privatevart:
Number=1;
privatevargame_begin:
MovieClip
privatevargame_end:
MovieClip
privatevardepth:
privatevartopScore:
Number=0
publicvartime:
//构造函数
functionGame_control(){
init();
//隐式设置方法
publicfunctionset_time(ttt:
//公-私有方法
publicfunctioninit(){
time=35
_root.score=0;
_root.createEmptyMovieClip("
pl"
3);
item"
2);
_root.createEmpt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- flash 课程设计