




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《二维动画课程设计》
课程设计报告
基于AS3.0的嬉戏设计
一、序言
1课程设计目标
二维动画课程设计旨在教授学生基本的设计原理和思路,并能发
挥学生的个人创意实力,运用Flash软件和一些常用协助软件,设计
制作flash动闽作品,并特殊强调学生的创新实力和动手实力。本课
程设计要求学生在接受课堂理论学问学习之后,能娴熟利用Flash软
件制作相关的动画.
2、设计主题
1.基于AS3.0制作一个打飞机小嬉戏。
2.主要运用FlashCS4软件和PhotoShopCS3图片处理软件。
3、嬉戏简介
这是利用flashcs4基于AS3.0代码设计的一款简洁的打飞机
嬉戏,这款嬉戏借鉴了经典的打鸭子嬉戏的一些做法,再结合自己
的一些想法设计出来的。用AdobeFlashPlayer打开嬉戏后,按
起先键,我们会看到:敌机在空中来回飞行,按左右上下箭头键限
制飞机炮在空中左右上下移动,按下空格键放射子弹,击中敌机后,
敌机爆炸。当被敌机遇到后,飞机爆炸,嬉戏结束,或是当击落的
敌机达到100架后,嬉戏结束。
ASASAS
|{}(){}
AAGunAirAirRaidBullet
AirRaid,fla主文件,程序界面与元件,绑定了文档
类AirRaid,as。
AirRaid,as文档类,程序的入口,限制整个程序的逻
辑依次,逻辑结构关系。
AAGun.as绑定库中的火炮的类,限制火炮
AirPlane,as绑定库中的敌机的类,限制飞机
Bullet,as绑定库中的子弹的类,限制子弹
3、嬉戏中各图层名称与作用
嬉戏中的主文件AirRaid,fla文件,分为7个图层4帧,帧上有代码,
绑定了文档类
2、背景层:在其次帧嬉戏起先时显示下雨效果。
3、成果显示层:得分:动态文本,实例名showScore;
剩余子弹:动态文本,实例名showShots;
级别:动态文本,实例名称showjbo
4、按钮与提示层:第1帧:起先按钮与说明,按钮实例名:
startButtono
第3帧:重新起先按钮与结束提示,按钮实例名
playAgainButtorio
第4帧:重新起先按钮与结束提示,按钮实例名
playAgaino
5、as(代码)层:4帧每帧都有代码,详细代码将在下面说明。
6、背景音乐层:在嬉戏起先时播放背景音乐。
7、标签层:第1帧:标签名称intro;第2帧:标签名称play;
第3帧:标签名称gameover;第4帧:标签名称gamewin。
三、设计步骤
1、制作嬉戏必需的素材和打算工作
首先按前面嬉戏结构中说明的那样,建好五个文件分别为:
AirRaid,fla^AirRaid.as>
AAGun.as>AirPlane,as>Bullet,asoAirRaid,fla文件与文档类
AirRaid,as绑定,在AirRaid.fla
文件
中新建9个影片剪辑分别为:
AAgun:在里面制作飞机炮并将类名命名为AAgun,与外面的AAgun.as
绑定。
Airplane:1-5帧每帧一个飞机图形。第6-9帧爆炸图形并添加爆炸
声音,有标签:explode
第10帧有代码parent.removeChiId(this);stop();(说
明:parent是父容器
this是自身removeChild是移除。这句代码的意思是通知
父容器把它从显示界面移除。就是说当子弹击中敌机,敌机
播放爆炸效果。播放到第10帧时,就通知它的父容器把它从
屏幕上移除。),类名为Airplane。
bullet:绘制子弹,类名为bullet。
yudi:制作下雨动画;先制作好一个雨滴,将类名命名为ydjnc,在
代码层写
varbl;
varsj:Timer=newTimer(Math,random()*500+500,10);
sj.addEventListener(TimerEvent.TIMER,sjcd);
sj.start();
functionsjcd(event:TimerEvent){
for(varb=0;b<5;b++){
varyd:yd_mc=newydmc();
addChiIdAt(yd,bl);
yd.x=Math.random()*550;
yd.y=Math.random()*100;
bl++;
)
begin:制作嬉戏起先时的说明,在按钮与毙示层第一帧拖到主场景,
并命名为p3_mco
fail:制作嬉戏失败时的说明,在按钮与秃示层第三帧拖到主场景,
并命名为pl_mco
win:制作嬉戏成功时的说明。在按钮与提示层第四帧拖到主场景,
并命名为p2_mco
dfj:制作打飞机嬉戏的图片。在按钮与提示层第一帧拖到主场景,
并命名为p4_mco
sy:导入背景音乐,在背景音乐层其次帧布到主场景。
然后再制作一个按钮命名为BasicButton,到这里只要再把须要的背
景图片和声音导入,制作嬉戏所须要的素材全部制作好了。
2、嬉戏中各图层中的一些代码的书写和说明
在前面嬉戏结构中已经说明白主场景中各图层的作用和关系,现
在就嬉戏中各图层中的一些代码的书写进行说明并说明。
(1)、as(代码)层的每帧代码与说明:
第1帧代码:
importflash,events.MouseEvent;
stop();
startButton.addEventListener(MouseEvent.CLICK,clickStart.);
functionclickStart(event:MouseEvent){
gotoAndStop(/,play,/);
)
说明:给startButton注册了鼠标点击事务,用clickStart方法来
实现,点击startButton
按钮就把影片转到第2帧上嬉戏的进行界面。
第2帧代码:
stopO;
startAirRaidO;
说明:调用文档类的startAirRaid方法,执行这个方法,就会生成
敌机,火炮,接受用户
的键盘操作事务来生成子弹等一系列操作。
第3帧代码:
playAgainButton.addEventListener(MouseEvent.CLICK,clickPlay
Again);
functionclickPlayAgain(event:MouseEvent){
gotoAndStop(,,play,/);
)
说明:给playAgainButton注册了鼠标点击事务,用clickPlayAgain
方法实现,点击
playAgainButton按钮跳转到第2帧。
第4帧代码:
playAgain.addEventListener(MouseEvent.CLICK,clickPlay);
functionclickPlay(event:MouseEvent){
gotoAndStop(/zplay/z);
)
说明:给playAgain注册了鼠标点击事务,用clickPlayAgain方法
实现,点击跳转playAgain
按钮到第2帧。
(2)、按钮与提示层的各帧代码与说明:
第1帧代码
importfl.transitions.*;
importfl.transitions,easing.
TransitionManager.start(p3_mc,{type:Fade,
direction:Transition.IN,
duration:3,
easing:None.easeNone});
TransitionManager.start(p4_mc,{type:PixelDissolve,
direction:Transition.IN,
duration:6,
easing:None.easeNone,
xSections:100,
ySections:50));
说明:用淡入的效果显示p3_mc影片剪辑看,用像素溶解的效果显示
p4_mc影片剪辑。
第3帧代码
importfl.transitions.*;
importfl.transitions,easing.
TransitionManager.start(plme,{type:PixeiDissolve,
direction:Transition.IN,
duration:2,
easing:None.easeNone,
xSections:100,
ySections:50));
说明:用像素溶解的效果显示pl_mc影片剪辑。
第4帧代码
importfl.transitions.
importfl.transitions,easing.
TransitionManager.start(p2me,{type:Zoom,
direction:Transition.IN,
duration:2,
easing:Elastic.easoOut});
说明:用弹性缩放的效果显示p2_mc影片剪辑。
(3)、嬉戏制作中各脚本类的编写和作用
编写AirRaid,as类
AirRaid类是嬉戏的限制器,绑定AirRaid.fla。负责生成界面上
的飞机、飞机炮、子弹。显
示得分、子弹的剩余数量和级别。注册了键盘按下,释放侦听器,接
收用户的键盘操作。注
册了进入帧事务侦听器,进行碰撞检测。定义一个飞机计时器,随机
生成飞机。检测剩余子
弹的数目,当子弹数为零或飞机炮敌机相撞时嬉戏结束,移除界面上
的飞机,火炮,跳转到
嬉戏失败界面,当击落的敌机数为100时嬉戏结束,移除界面上的飞
机,火炮,跳转到游
戏成功界面。(代码如下)
package{
import
flash.display.MovieClip;
import
flash,display.SimpleButton;
import
flash,events.KeyboardEvent;
importflash,utils.Timer;
import
flash,events.TimerEvent;
importflash,text.TextField;
importflash,events.Event;
publicclassAirRaidextends
MovieClip{
privatevarspeed:Number;
privatevaraagun:AAGun;//
飞机炮
privatevar
airplanes:Array;〃飞机数组
privatevar
bullets:Array;〃子弹数组
publicvar
leftArrow,rightArrow,upArrow,
downArrow:Boo1ean;
privatevar
nextPlane:Timer;〃不定时生成
飞机的计时器
privatevar
shotsLeft:int;〃得分文本
privatevarshotsHit:int;//
子弹数文本
privatevarjibie:int;〃得
分文本
publicfunction
startAirRaid(){
//初始化得分数、子弹数
和级别
jibie=l;
shotsLeft=300;
shotsHit=0;
showGameScore();
//生成飞机炮加入到舞台
上
aagun=newAAGun();
addChiId(aagun);
//生成飞机、子弹数组
airplanes=newArray();
bullets=newArray();
//键盘按下、释放事务侦
听器
stage.addEvontListoner(KeyboardEvcnt.KEYDOWN,koyDownFun
ction);
stage.addEventListener(KeyboardEvent.KEYUP,keyUpFunctio
n);
//进入帧事务侦听器,检测子弹
击中飞机和敌机飞机炮的碰撞检
测。
addEventListener(Event.ENTERFRAME,checkForllits);
addEventListener(Event.ENTER
FRAME,checkForllit);
//生成下一架飞机
setNextPlane();
}
〃依据级别的不同不定时生成
飞机
publicfunction
setNextPlane(){
if((shotsHit<=10)){
//1000毫秒至2000毫
秒之间生成一架飞机
nextPlane=new
Timor(1000+Math.random()*1000
,1);
nextPlane.ciddEventListener(TimerEvent.TIMERCOMPLETE,new
Plane);
nextPlane.start();
}elseif(shotsHit>10
&&shorsHit<=20){
jibie=2;
//800毫秒至1600毫秒
之间生成一架飞机
nextPlane=new
Timer(800+Math.random()*800,1
);
showGameScore();
nextPlane.addEventListener(TimerEvent.TIMERCOMPLETE,new
Plane);
nextPlane.start();
}elseif(shotsHit>20
&&shorsHit<=30){
jibie=3;
//600亳秒至1200亳秒
之间生成一架飞机
nextPlane=new
Timer(600+Math.random()*600,1
);
showGameScore();
nextPlane.addEventListener(TimerEvent.TIMERCOMPLETE,new
Plane);
nextPlane.start();
}elseif(shotsHit>30
&&shotsHit<=40){
jibie=4;
//400毫秒至800毫秒
之间生成一架飞机
nextPlane=new
Timer(400+Math.random()*400,1
);
showGameScore();
nextPlane.addEventListener(TimerEvent.TIMERCOMPLETE,newPla
ne);
nextPlane.start();
}elseif(shotsHit>40
&&shotsHit〈=50){
jibie=5;
//200毫秒至400毫秒
之间生成一架飞机
nextPlane=new
Timer(200+Math.random()*200,1
);
showGameScore();
nextPlane.addEventListener(TimerEvent.TIMERCOMPLETE,new
Plane);
nextPlane.start();
}elseif(shotsHit>50
&&shorsHit<=60){
jibie=5;
//100毫秒至200毫秒
之间生成一架飞机
nextPlane=new
Timer(100+Math.random()*100,1
);
showGameScore();
nextPlane.addEventListener(TimerEvent.TIMERCOMPLETE,new
Plane);
nextPlane.start();
}elseif(shotsHit>60
&&sho二sHit«70){
jibie=6;
//90毫秒至180毫秒之
间生成一架飞机
nextPlane=new
Timer(90+Math.random()*90,1);
showGameScore();
nextPlane.addEventListener(TimerEvent.TIMER_COMPLETE,new
Plane);
nextPlane.start();
}elseif(shotsllit>70
&&shotsHit<=80){
jibie=7;
//80毫秒至160毫秒之
间生成一架飞机
nextPlane=new
Timer(80+Math.random()*80,1);
showGameScore();
nextPlane.addEventListener(TimerEvent.TIMERCOMPLETE,new
Plane);
nextPlane.start();
}elseif(shotsHit>80
&&shorsHit<=90){
jibie=8;
//70毫秒至140毫杪之
间生成一架飞机
nextPlane=new
Timer(70+Math.random()*70,1);
showGameScore();
nextPlane.addEventListener(TimcrEvent.TIMERCOMPLETE,new
Plane);
nextPlane.start();
}elseif(shotsHit>90
&&shoisHit<=100){
jibie=9;
//60毫秒至120毫秒之
间生成一架飞机
nextPlane=new
Timer(70+Math.random()*70,1);
showGcimeScore();
nextPlane.addEventListener
(TimerEvent.TIMER_COMPLETE,ne
wPlane);
nextPlane.start();
publicfunction
newPlane(event:TimerEvent){
//随机的边、速度和高度
if(Math,random()>.5){
var
side:String=,zleft,z;
}else{
side=〃right〃;
]
var
altitude:Number=Math.random()
*50+20;
〃依据级别的不同,敌机的飞行速度的设定
if(jibie<=2){
speed=Math,random()*150+15
0;
}elseif
(jibie>2&ajibie<=4){
speed=Math.random()*175+17
5;
}elseif
(jibie>4&&jibie<=6){
speed=Math.random()*200+20
0;
}elseif(jibie>6){
speed=Math,random()*225+22
5;
i
J
//生成飞机
varp:Airplane=new
Airplane(side,speed,altitude)
*
9
addChild(p);
airplanes,push(p);
setNextPlaneO;
//敌机和飞机炮的碰撞检测
publicfunction
checkForllit(event:Event){
for(var
airplaneNum:int=airplanes,len
gth-1;airplaneNum>=0;
airplaneNum--){
if
(aagun.hitTestObject(airplane
s[airplaneNum])){
airplanes[airplaneNum].pla
neHit();
endGame();
)
J
)
//子弹和敌机的碰撞检测
publicfunction
checkForHits(event:Event){
for(var
bulletNum:int=bullets.length-
1;bulletNum>=0;bulletNuni--)
(
for(var
airplaneNum:int=airplanes.len
gth-l;airplaneNum>=0;
airplaneNum--){
if
(bullers[bulletNum],hitTestOb
ject(airplanes[airplaneNum]))
(
airplanes[airplaneNum].pla
neHit();
bullets[bulletNum].deleteB
ullet();
shotsllit++;
showGameScore();
break;
}
)
〃当击落的敌机数位100时•,嬉戏成功,结束
if((shotsllit==100)){
winGcime();
]
〃当子弹为零时,嬉戏失败,结束
if((shotsHit!=100)&&(shotsLeft==0)){
endGame();
/
)
//按下键盘
publicfunction
keyDownFunction(event:Keyboar
dEvent){
if(event.keyCode==37){
1eftArrow二true;
}elseif(event.keyCode
==39){
rightArrow=true;
}elseif(event.keyCode
=38){
upArrow=true;
}elseif(event.keyCode
==40){
downArrow=true;
}elseif(event.keyCode
=32){
fireBullet();
)
}
//释放键盘
publicfunction
keyUpFunction(event:KeyboardE
vent){
if(event.keyCode==37){
leftArrow=false;
}elseif(event.keyCode
=39){
rightArrow=false;
}elseif(event.keyCode
=38)
upArrow=false;
}elseif(event.keyCode
==40){
downArrow=false;
!
)
//生成新的子弹
publicfunctionfireBullet()
(
if(shotsLeft<=0){
return;
/
varb:Bullet=new
Bullet(aagun.x,aagun.y,-300);
varkq:zidan=new
zidan();
kq.play();
addChild(b);
bullets,push(b);
shotsLeft―;
showGameScore();
}
publicfunction
showGameScore(){
showScore.text=String(,z
得分:*+shotsHit);
showShots.text=String(〃
剩余子弹:〃+shotsLeft);
showjb.text=String(〃级
别:〃+jibie);
//从数组获得飞机
publicfunction
removePlane(plane:Airplane){
for(variinairplanes)
(
if
(airplanes[i]==plane){
airplanes.splice(i,1);
break;
)
)
}
//获得数组的一个子弹
publicfunction
removeBullet(bullet:Bullet){
for(variinbullets){
if
(bullets[i]==bullet){
bullets.splice(i,1);
break;
)
;
)
//嬉戏结束,移除界面上的东
西。
publicfunctionendGame(){
//移除飞机
for(var
i:int=airplanes.length-1;
i>=0;i—){
airplanes[i].deletePlane()
airplanes二nuH;
aagun.deleteGun();
aagun=null;
//移除侦听器
stage.removeEventListener(KeyboardEvent.KEYDOWN,keyDown
Function);
stage.removeEventListener(KeyboardEvent.KEY_UP,keyUpFunc
tion);
removeEventListener(Event.ENTERFRAME,checkForllits);
removeEventListener(Event.ENTERFRAME,checkForHit);
nextPlane.stopO;
nextPlane=null;
gotoAndStop(/,gameover,/);
)
publicfunctionwinGame(){
//移除飞机
for(var
i:int=airplanes,length-1;
i>=0;i―){
airplanes[i].deletePlaneO
airplanes=null;
aagun.deleteGunO;
aagun=null;
//移除侦听器
stage.removeEventListener(KeyboardEvent.KEYDOWN,keyDown
Function);
stage.removeEventListener(KeyboardEvent.KEYUP,keyUpFunc
tion);
romovcEvontListoner(Event.
ENTER_FRAME,checkForllits);
removeEventListener(Event.
ENTERFRAME,checkForHit);
nextPlane.stop();
nextPlane=null;
gotoAndStop("gamewin");
}
}
)
编写AAGun.as类
AAGun类:邦定库中的飞机炮元件,限制飞机炮的初始位置和向左、
向右、向上、向下移
动,检测边界,飞机炮的消毁。(代码如下)
package{
importflash,display.
importflash,events.*;
importflash,utils.getTimer;
publicclassAAGunextends
MovieClip{
staticconst
speed:Number=150.0;
privatevarlastTime:int;//
限制移动的Timer
publicfunctionAAGun(){
//飞机炮的初始位置
this.x=275;
this.y=340;
〃运动
addEventListener(Event.ENT
ERFRAME,moveGun);
publicfunction
moveGun(event:Event){
//得到时差
var
timePassed:int=getTimer()-las
tTime;
lastTime+=timePassed;
//现在的位置
varnewx=this.x;
varnewy=this.y;
//移动到左边
if
(MovieClip(parent).leftArrow)
newx-=speed*timePassed/100
0;
)
//移动到右边
if
(MovieClip(parent).rightArrow)
(
newx+=speed*timePassed/100
0;
/
//移动到上边
if
(MovieClip(parent).upArrow){
newy-=5;
i
J
//移动到下边
if
(MovieClip(parent).downArrow)
newy+=5;
//检测边界
if(newx<10){
newx=10;
!
if(newx>540){
newx=540;
]
if(newy<10){
newy=10;
;
if(newy>380){
newy=380;
//更新位置
rhis.x=newx;
rhis.y=newy;
)
//移除屏幕上的飞机炮和事
务
publicfunctiondeleteGun()
parent.removeChild(this);
removeEventListener(Event.
ENTERFRAME,moveGun);
)
}
)
编写Airplane,as类
Airplane类:邦定库中的飞机元件。随机产生飞机,随机的速度,
产生5种飞机样式,检测
是否飞出边界,检测被子弹击中。自动毁灭和爆炸效果。(代码如下)
package{
importflash.display.MovieClip;
importflash,events.TimerEvent;
importflash,utils.Timer;
importflash,utils.getTimer;
importflash,events.Event;
publicclassAirplaneextendsMovieClip{
privatevardx:Number;//飞机的速度、方向
privatevar
dy:Number;
privatevarlastTime:int;//限制移动的Timer
〃左右移动
publicfunctionAirplane(side:String,
speed:Number,altitude:Number)
(
varbl;
if(side二二"left"){
this,x=-50;//starttothe
left
for(varb=0;
b<5;b++){
this.y=Math.random()*400;
if(this.y>300){
dy
=-l/3*Math.random0*speed;}
else(dy
=-l/3*Math.random()*speed;}
dx二speed;
bl++;
this.scaleX=-1;//reverse
)
}elseif(side
二二"right"){
this,x=600;//starttothe
right
for(vara=0;
a<5;a++){
this,y二Math,random()*400;
if(this.y>300){
dy
=-l/3*Math.random()*speed;}
else{dy
=-l/3*Math.random0*speed;}
dx二-speed;
bl++;
this.scaleX=1;
)
}
this.gotoAndStop(Math,floor(M
ath.random()*5+1));
addEventListener(Event.ENTER_
FRAME,movePlane);
lastTime=getTimer();
〃检测边界
publicfunctionmovePlane(event:Event){
vartimePassed:i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年空气涡轮制冷精细橡胶粉生产装置项目发展计划
- 2025年输电用无功补偿装置项目发展计划
- 2026届新疆阿克苏地区沙雅县第二中学化学高一第一学期期中联考试题含解析
- 供水厂基础知识培训内容
- 2026届河南省商开大联考化学高一第一学期期中学业质量监测试题含解析
- 二年级解决错中求解问题练习题(附答案)
- 2025年车挂合作协议书
- 2025年洗护用品项目建议书
- 供暖知识培训活动课件
- 2025年有限空间应急预案演练脚本方案
- 京东商家伙伴合作大会
- 2017版银皮书(中英文完整版)FIDIC设计采购施工交钥匙项目合同条件
- 物业承接查验操作指南
- 巴黎拉德芳斯CBD
- 燃烧器控制器LMG说明书
- HSE宣传与警示管理规定
- 云课堂题库考试答案免费
- 公安机关业务技术用房建设标准
- GB/T 16919-1997食用螺旋藻粉
- GB/T 1682-2014硫化橡胶低温脆性的测定单试样法
- GB/T 15700-2008聚四氟乙烯波纹补偿器
评论
0/150
提交评论