二维动画课程设计_第1页
二维动画课程设计_第2页
二维动画课程设计_第3页
二维动画课程设计_第4页
二维动画课程设计_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《二维动画课程设计》

课程设计报告

基于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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论