Flash作业
姓名:潘俊杰
班级:工业设计+软件工程102
学号:1018160209
1、 作品名称
潜艇大战
2、 作品简介
本游戏通过鼠标点击将屏幕上由左至右移动的物体消除,游戏共分为10个级别,当游戏者每消除出一个物体是会得到一定的分数,游戏级别随着分数增加而提高,级别越高物体移动速度越快,当达到10级时游戏结束。
3、作品基本制作步骤
1)新建一Flash(ActionScript3.0)文档,命名为“潜艇大战”,将其舞台的大小设置成
1200*650像素。该界面即为我们游戏中的初始界面。 2)将该图层命名为背景层,在第一帧处插入空白关键帧并将该背景图片导入到舞台中,如图1所示。
图1
3)新建图层,命名为帮助,在第一帧处创建一个按钮命名为bt_2如图2,在第二帧处创建一个文本填写内容,并设置“start”和“back”分别命名为bt_4和bt_5两个按钮如图3所示:
图2
图3
4)创建新的图层命名为开始,在第一帧处插入关键帧,创建一个“开始”按钮,命名为bt_1。在第3帧处插入空白关键帧,导入视频。如图4所示:
图4
5)新建图层命名为游戏背景,在636帧处创建空白关键帧,插入背景图片并在637帧处插入关键帧如图5所示;
图5
下面我们制作游戏的结束画面。当我们赢得游戏时,会出现“victory”的文字提示信息。新建一影片剪辑对象,将其命名为“jieguo”,在第1帧处使用文本工具输入上述文字信息,并将其颜色设置为黄色,并将该文字转换为图形元件,在第10帧处插入关
键帧,使用任意变形工具将该图形元件进行放大,并在第1帧和第10帧之间创建传统补间,如图6所示:
图6
6)回到主场景中,新建一图层,命名为结果层,在其第367帧处插入关键帧,并将“jieguo”影片剪辑放置到舞台中央,如图7所示。
图6
7)新建一图层,命名为音乐层,在第366帧处插入关键帧,导入到舞台一段优美的背景音乐,并使用属性面板将其同步选项设为事件,如图7所示。
图7音乐属性设置
2.主要元件的制作 鼠标(潜艇)元件
本游戏中需要让潜艇击沉不断出现的敌舰,所以我们首先要创建用于鼠标作用的潜艇元件。
1)新建一影片剪辑元件,命名为“mouse”,并选择链接:为ActionScript导出(X)。在其类(C):文本框中输入类名mm,如图8所示:
图8
2)进入该元件的编辑模式,在图层1第1帧处插入关键帧,将潜艇图片导入到舞台,新建图层2在第一帧处插入鱼雷图片,在20帧处将其移到舞台中央并创建传统补间,在图层2第21帧处插入准星并将其放置在舞台中央,在图层1的21帧处插入关键帧,在第图层21帧,右键选择动作面板,在其中输入代码:stop();如图9所示:
图9鼠标元件的初始界面效果
此时用来代替鼠标的潜艇鱼雷元件就完成了。
爆炸元件设计
爆炸元件实现当鼠标点击敌船时,该敌船会先变爆炸,当爆炸结束时,会出现断掉的船效果,其制作过程如下:
1)新建一影片剪辑,命名为“爆炸1”,在第1帧处导入一“图形元件,该图形元件中放置一“爆炸”图片,并将其宽度缩小至228,高度缩小至168,将该图形元件的alpha值设置为15%,如图10所示:
图10
2)在第10帧处插入关键帧,将“爆炸”图形元件的宽度设置为371.6高度设置为234,并将其alpha值设置为100。并在1-10帧处创建传统补间,如图11所示:
图11
3)在第25帧处插入关键帧将其alpha值设置为0%,在10-25帧处创建传统补间,并在25帧处设置动作:stop();如图11所示。
图11
4)新建一图层,将其放在上一步中创建的图层的下面,在第一帧处导入一“敌舰”图形元件,在该图形元件中放置一敌舰图片。并将该“敌舰”图形元件放置在之前所创建的爆炸元件之中,如图12所示:
图12
12)在第10帧处插入关键帧,将该图形元件的alpha值设置为12%,并在1-10帧处创建传统补间,如图13所示:
图13
13)在图层2的24处插入毁坏的战舰图片,并在10-45帧之间插入传统补间,,如图14所示:
图14
14)在第25帧处插入空白关键帧,并设置动作:stop();,如图15所示:
图15
目标(敌舰)元件
1)新建一影片剪辑元件,命名为“target1”, 并选择链接:为ActionScript导出(X)。在其类(C):文本框中输入类名target1,如图16所示:
图16
2)进入该元件的编辑模式,在其第1帧处插入关键帧,将一敌舰图片导入到舞台中,如图17所示。
图17
3)在第6帧处插入空白关键帧,将该敌舰所对应的“爆炸”影片剪辑元件放置舞台,并在12帧处插入帧,如图18所示:
图18
4)新建一图层,在第6帧处插入空白关键帧。在在第6帧处插入关键帧,加载一音效,实现鼠标点击成功的音频效果,如图19所示:
图19
5)再新建一图层,在第1帧处选择动作面板,在其中输入代码:stop();先使该影片剪辑对象停止。在第6帧处插入空白关键帧,将其属性面板中的帧标签文本框中设置值为hit,表示该帧为鼠标点中的帧,将会播放击中的效果,如图20所示:
图20
7)在第12帧处插入空白关键帧,打开动作面板,在其中输入代码:stop();使该影片剪辑停止。
同样的方法制作影片剪辑target2,target3和target4,并分别为其选择链接:为ActionScript导出(X)。在其类(C):文本框中输入类名target2、target3和target4.
此时我们需要的相应元件就制作完毕了。下面就需要为该游戏添加脚本代码了。
3.添加动作脚本
1)回到主场景中,在开始图层第一帧设置动作 stop();
bt_1.addEventListener(MouseEvent.CLICK, startMovie); function startMovie(event:MouseEvent):void {
this.gotoAndPlay(3); }
该代码段首先将主场景停止,然后在控制按钮bt_1上增加单击监听事件。当我们单击该按钮时,主场景就跳至第3帧处播放。
2)在第帮助图层1帧处打开动作面板,在其中输入如下代码: stop();
bt_2.addEventListener(MouseEvent.CLICK, f1); function f1(e) {
this.gotoAndPlay(2); }
该代码段首先将主场景停止,然后在控制按钮bt_2上增加单击监听事件。当我们单击该按钮时,主场景就跳至第2帧处播放。 在2帧处设置动作,代码如下: stop();
bt_4.addEventListener(MouseEvent.CLICK, f2); function f2(e) {
this.gotoAndPlay(1); }
bt_5.addEventListener(MouseEvent.CLICK, f3); function f3(e) {
this.gotoAndPlay(3); }
该代码段首先将主场景停止,然后在控制按钮bt_4、bt_5上增加单击监听事件。当我们单击bt_4时返回第一帧,单击bt_5时调转到第3帧。
3)创建图层将其命名为代码层,在第一帧处设置动作,代码如下 Mouse.hide();
stage.addEventListener(MouseEvent.MOUSE_MOVE,sbhs) stage.addEventListener(MouseEvent.MOUSE_DOWN,axhs) var mouse=new mm(); this.addChild(mouse);
function sbhs(event:MouseEvent) { mouse.x = mouseX;
mouse.y = mouseY; event.updateAfterEvent(); }
mouse.mouseEnabled=false;
function axhs(event:MouseEvent) { mouse.gotoAndPlay(2); }
该段代码首先将源鼠标图像隐藏,在舞台中添加鼠标移动和鼠标按下的监听器。然后在运行该帧时,在场景中利用我们之前创建好的鼠标(巫师)元件创建一鼠标对象mouse,并将该对象添加到当前场景中显示。然后定义了鼠标的移动事件,在该事件中将鼠标的x坐标和y坐标定义与源鼠标坐标相同,并调用updateAfterEvent()函数在该事件执行完毕后更新舞台,实现鼠标的实时显示效果。然后将鼠标的mouseEnabled属性设置为flase.该语句实现自定义鼠标后鼠标事件的真正捕获。鼠标按下事件完成当按下鼠标元件时,进入鼠标元件的第2帧处播放。
3)在结果层的第636帧处插入空白关键帧,选择文本工具,首先使用静态文本在相应位置输入“时间:”、“分数:”和“级别:”并设置相应字体和文字颜色,如图21所示:
图21
4)将文本工具改成动态文本,依次在静态文本“时间:”、“分数:”和“级别:”旁边创建三个动态文本,并分别将其命名为“shijian”、“fenshu”和“jibie”,如图22所示:
图22
这三个动态文本框在程序中动态地记录程序运行时所消耗的时间、当前的分数以及当前所处的级别。
5)选中代码层,在其第636帧处插入空白关键帧,并选择动作面板,在其中输入如下代码:
stop();
var oldDate:Date = new Date(); var oldTime = oldDate.getTime(); var score=0; var level = 1; fenshu.text=\"0\"; var deep=1;
stage.addEventListener(Event.ENTER_FRAME,jr); function jr(hs:Event) { var newDate:Date = new Date(); var myTime = Math.floor((newDate.getTime() - oldTime) / 1000); if(level!=10) {shijian.text=myTime.toString(); var old_level = level; level = Math.floor(score/100); if (level != old_level) jibie.text=level.toString(); } if(level==10) gotoAndStop(4); if (randRange(0, 30 - level * 2) == 11) {
if((level!=10)) {var arr:Array = new Array(new target1(),new target2(),new target3(),new target4());
var number = randRange(0, 3); var target= arr[number]; addChildAt(target,deep); setChildIndex(mouse,deep+1) deep++; with (target) { y = randRange(50, 650); x = -target.width; scale = randRange(3, 5); scaleX = scale/16; scaleY = scale/16; } target.addEventListener(Event.ENTER_FRAME,jr1); function jr1(hs:Event) { target.x += 5; } target.addEventListener(MouseEvent.MOUSE_DOWN,ax); function ax(event:MouseEvent) {
score=score+10;
if(level!=10) fenshu.text=score.toString(); target.gotoAndStop(\"hit\"); } } } }
function randRange(minNum:Number, maxNum:Number):Number { return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum); }
3、 作品命名
源文件:潜艇大战.fla 影片文件:潜艇大战.swf
因篇幅问题不能全部显示,请点此查看更多更全内容