Flash入门必备Flash开发AS代码之游戏制作过程例子.docx
- 文档编号:9676216
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:27
- 大小:427.13KB
Flash入门必备Flash开发AS代码之游戏制作过程例子.docx
《Flash入门必备Flash开发AS代码之游戏制作过程例子.docx》由会员分享,可在线阅读,更多相关《Flash入门必备Flash开发AS代码之游戏制作过程例子.docx(27页珍藏版)》请在冰豆网上搜索。
Flash入门必备Flash开发AS代码之游戏制作过程例子
As3游戏制作
郑重声明这不是什么教程,说教对我来说还太遥远,本人只是个菜鸟,老鸟们不要见笑。
这里是一个简单的游戏的制作过程(谈不上开发),在这里我把一些简单的知识做个总结;
这是本人第一次在网上写一些东西,我会努力做到最好的;好了,废话不说了(*^__^*)嘻嘻……进入正题。
。
。
。
。
。
(本内容部分素材和知识来自风云II系列丛书)
概述:
本游戏涉及的主要知识点:
1,游戏控制:
本人大胆的把游戏控制分为了鼠标控制和键盘控制,本游戏中只涉及到了鼠标控制,但在整个游戏制作完成后,本人会补充键盘控制的内容。
2,物件的创建和销毁:
在游戏中,不可能所用的角色都事先拖放到舞台,大多数情况需要用代码随机的产生并加入到舞台;当然,我们有时候并不希望我们加入的元素一直存在在舞台上,我们希望在特定的时间和特定的条件下删掉我们的元素。
3,碰撞检测:
几乎所有的游戏都需要用到碰撞检测,本游戏用的是Object.hitTestObject(Object);还有一个常用的是object.hitTestPoint(x,y,Boolean);
4,事件:
As3的事件不是一两句话可以说的清楚的,本游戏用到的事件都是一些常用的事件,如计时器Timer,
还有一些零碎的知识,这里就不一一的列举出来;详细的内容见下。
一:
游戏介绍
开始画面
游戏进行中
结束画面
二:
游戏类的分析与设计:
经过上面对游戏的介绍,我们很清楚的知道游戏中的元素,它们是:
1,飞机Plan;;2,导弹Missle;3,生命球AddLife
游戏的元素比较简单,下面分别加以分析并设计它们;
(在你的磁盘中新建一个flash文档,重命名为”死里逃生.fla”,在该flash文档的同一目录下新建一个文件夹,重命名为“classes”;如下图:
)
1.飞机应该有的属性:
速度speed;生命:
life;他还应该能跟随鼠标移动;
具体做法如下,新建一个ActionScript文件,代码如下:
将上面的actionscript文件保存在classes文件夹中,文件命名为Plan.as,注意,文件名一点要与类名相同;
2,导弹应该有的属性和方法:
角速度:
omega,速度:
speed,导弹还要求能跟踪飞机。
代码如下:
将上面的as文件也保存在classes文件夹中,并把该as文件命名为Missle.as
注:
这些代码有些复杂,希望大家仔细看,理解了就好了。
在实现跟踪飞机这一代码块(即onTimerHandler函数),希望大家仔细把flash的坐标系统和Math的三角函数这些知识温习一下。
在这里我不太想讲像if语句,swich语句,while,do。
。
。
while。
。
。
语句,基本的表达式那些基本的内容,相信学过C的人都会这些的。
关于面向对象的一些核心内容:
类,属性,方法,接口,继承,多态。
我也不想讲,也不能讲,因为我不想误人子弟,我也只是了解这些知识,希望想了解的同学去看看有关java或c++的教程。
那下面接着第三个类:
3,生命球应该有的属性和方法:
所含的生命值,也就是能给主角加多少生命lifeValue;
所显示的时间,也就是生命球能在舞台上显示多久timed;
代码如下:
将上面的as文件也保存在classes文件夹中,并把该as文件命名为AddLife.as;
5,有关元素的类文件都写好了,就差一个文档类了,有关文档类的代码我们稍后再说,上面我们一直是写代码,现在我们来搭建主场景:
打开你新建的“死里逃生。
fla”文档,如下图搭建场景:
注:
前面是元素的类型,后面是文件的实例名。
“重新开始”按钮下面还覆盖了一个“开始”按钮,实例名为“start_btn”。
6:
类库的组成:
上图只显示出了与类库连接的原件;分别与我们上面写的类连接在一起;
库中还有声音文件,是个爆炸的声音,这个声音的连接属性设置为:
与“死里逃生.fla”文档在同一目录下的还有一个背景音乐,背景音乐的名字为:
mySong.mp3;
注意文件名一定要是mySong.mp3,因为在下面的代码中我用的是这个名字;
7:
最后我们来写文档类,把整个的代码和元件组织起来。
文档类的代码:
(此文件比较的繁琐,import语句可以简写,如:
import.flash.display.*;importflash.display.event.*;在这里没有采用简写,好让大家方便查阅API);
至此:
整个游戏的制作就结束了。
结束的目录结构应该如下:
Classes文件夹里的文件如下:
将上面的as文件也保存在classes文件夹中,并把该as文件命名为Test.as;
然后在“死里逃生.fla”文档的文档类后面的方框中填入:
classes.Test
如下图:
修正:
在Test类中的第63和第64之间加入如下语句:
if(myPlan.life<=0){
myPlan.life=0;
}
此条语句修正了血条死亡时显示不正常;
整个的游戏的制作过程算是写完了,现在我把刚开始罗列的4条知识点分别再详细的讲一下:
一.游戏控制:
讲到控制,就得有控制的对象,不管是鼠标控制还是键盘控制都有控制的对象(或说是控制的目标,比如上面游戏中的飞机),有两种方法将控制的对象加入舞台,一种是用代码addChild()在运行时加入舞台,另一种是直接从库中拖入到舞台(上面游戏的主角飞机采用的是这种方法);根据这两种加入舞台方法的不同,控制它们的代码也有所不同,如下:
:
采用代码的方法将被控对象加入舞台(键盘控制):
:
在您的计算机磁盘中新建一个fla文档,重命名为“键盘控制_1.fla”在这个文档的同一目录新建一个文件夹,重命名为“classes”;双击打开“键盘控制_1.fla”文档。
将舞台设置为800*600;在舞台上新建一个影片剪辑(随便画什么,这里就画一个圆),命名为“主角圆”(不是实例名,你可以取其他的名字)。
建好影片剪辑之后,把舞台上的这个影片剪辑的实例删掉。
这时库中会有刚刚建立的影片剪辑元件;保存一下;
b:
点击“键盘控制_1.fla”文档的文件菜单>新建>ActionScript文件。
写下代码如下:
packageclasses{
importflash.display.MovieClip;
publicclassCircleextendsMovieClip{
privatevarspeed:
int;
publicfunctionCircle(){
speed=5;
}
publicfunctionmoveLeft():
void{
this.x+=speed;
}
publicfunctionmoveRight():
void{
this.x-=speed;
}
publicfunctionmoveUp():
void{
this.y-=speed;
}
publicfunctionmoveDown():
void{
this.y+=speed;
}
}
}
将这个as文件保存在“classes”文件夹中,保存名为“Circle.as”;
c:
再点击“键盘控制_1.fla”文档的文件菜单>新建>ActionScript文件。
写下代码如下:
packageclasses{
importflash.display.MovieClip;
importflash.events.KeyboardEvent;
importflash.ui.Keyboard;
publicclassTestextendsMovieClip{
privatevarmyCircle:
Circle;
publicfunctionTest(){
myCircle=newCircle();
myCircle.x=400;
myCircle.y=300;
addChild(myCircle);
stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDownHandler);
}
privatefunctiononKeyDownHandler(e:
KeyboardEvent):
void{
switch(e.keyCode){
caseKeyboard.LEFT:
myCircle.moveLeft();
break;
caseKeyboard.RIGHT:
myCircle.moveRight();
break;
caseKeyboard.UP:
myCircle.moveUp();
break;
caseKeyboard.DOWN:
myCircle.moveDown();
break;
}
if(myCircle.x>800-myCircle.width/2){
myCircle.x=800-myCircle.width/2;
}elseif(myCircle.x myCircle.x=myCircle.width/2; }elseif(myCircle.y>600-myCircle.height/2){ myCircle.y=600-myCircle.height/2; }elseif(myCircle.y myCircle.y=myCircle.height/2; } } } } 注意上面的事件监听器的目标是舞台; 将这个as文件保存在“classes”文件夹中,保存名为“Test.as”; d: 切换到“键盘控制_1.fla”文档,在库中的影片剪辑“主角圆”上点击鼠标右键,在弹出的菜单中选择“链接”,之后在弹出的对话框中如下图填写相关的项目: 点击确定; e: 点击“键盘控制_1.fla”文档舞台的空白区,在属性栏中的文档类中填写: classes.Test; 如下图所示: f: 测试影片,方向键能控制圆上下左右运动; : 采用代码的方法将被控对象加入舞台(鼠标控制): : 在您的计算机磁盘中新建一个fla文档,重命名为“鼠标控制_1.fla”在这个文档的同一目录新建一个文件夹,重命名为“classes”;双击打开“鼠标控制_1.fla”文档。 将舞台设置为800*600;在舞台上新建一个影片剪辑(随便画什么,这里就画一个圆),命名为“主角圆”(不是实例名,你可以取其他的名字)。 建好影片剪辑之后,把舞台上的这个影片剪辑的实例删掉。 这时库中会有刚刚建立的影片剪辑元件;保存一下; b: 切换到“鼠标控制_1.fla”文档,在库中的影片剪辑“主角圆”上点击鼠标右键,在弹出的菜单中选择“链接”,之后在弹出的对话框中如下图填写相关的项目: 由于我们没有真的去写Circle类,所以会弹出如下对话框: 直接点“确定”就可以了。 c: 点击“鼠标控制_1.fla”文档的文件菜单>新建>ActionScript文件。 写下代码如下: packageclasses{ importflash.display.MovieClip; importflash.events.MouseEvent; importflash.ui.Mouse; publicclassTestextendsMovieClip{ privatevarmyCircle: Circle; publicfunctionTest(){ myCircle=newCircle(); addChild(myCircle); myCircle.x=400; myCircle.y=300; stage.addEventListener(MouseEvent.MOUSE_MOVE,onMouseMoveHandler); } privatefunctiononMouseMoveHandler(e: MouseEvent): void{ Mouse.hide(); myCircle.x=e.stageX; myCircle.y=e.stageY; } } } d: 点击“鼠标控制_1.fla”文档舞台的空白区,在属性栏中的文档类中填写: classes.Test; 如下图所示: f: 测试影片,圆能随着鼠标移动; : 直接从库中将被控对象拖入舞台(键盘控制); : 在您的计算机磁盘中新建一个fla文档,重命名为“键盘控制_2.fla”在这个文档的同一目录新建一个文件夹,重命名为“classes”;双击打开“键盘控制_2.fla”文档。 将舞台设置为800*600;在舞台上新建一个影片剪辑(随便画什么,这里就画一个圆),命名为“主角圆”(不是实例名,你可以取其他的名字)。 建好影片剪辑之后,(不要删掉舞台上主角圆的实例)这时库中有刚刚建立的影片剪辑元件而库中同时有它的实例;保存一下; b: 点击“键盘控制_2.fla”文档的文件菜单>新建>ActionScript文件。 写下代码如下: packageclasses{ importflash.display.MovieClip; importflash.display.Stage; importflash.events.KeyboardEvent; importflash.ui.Keyboard; publicclassCircleextendsMovieClip{ privatevarspeed: int; publicfunctionCircle(){ speed=5; this.stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDownHandler); } privatefunctiononKeyDownHandler(e: KeyboardEvent): void{ switch(e.keyCode){ caseKeyboard.LEFT: moveLeft(); break; caseKeyboard.RIGHT: moveRight(); break; caseKeyboard.UP: moveUp(); break; caseKeyboard.DOWN: moveDown(); break; default: break; } } privatefunctionmoveLeft(): void{ this,x-=speed; } privatefunctionmoveRight(): void{ this.x+=speed; } privatefunctionmoveUp(): void{ this.y-=speed; } privatefunctionmoveDown(): void{ this.y+=speed; } } } 注意这句: this.stage.addEventListener(…………);舞台中有this的实例时,才能调用this的stage属性,否则会报错的。 将这个as文件保存在“classes”文件夹中,保存名为“Circle.as”; c: 切换到“键盘控制_2.fla”文档,在库中的影片剪辑“主角圆”上点击鼠标右键,在弹出的菜单中选择“链接”,之后在弹出的对话框中如下图填写相关的项目: d: 测试影片,方向键能控制主角圆的移动; 这里就不再啰嗦写”鼠标控制_2.fla”了。 相信大家早以多我的啰嗦忍无可忍了。 O(∩_∩)o… 总结一下: 键盘控制和鼠标控制都需要用stage.addEventListener(………,……..);文档类可以直接用stage属性,而非文档类要用这个类的实例的stage属性(即this.stage),就要求事先有实例放在舞台上;(纯属个人总结,正确与否只是本人认证了一下,没有任何官方的说明。 您认这种说法错误,可直接略过这段,不要被我误导了。 ) 二.物件的创建与销毁 物件的创建和销毁比较简单的,大体来说就是在文档类中采用new关键字创建新的对象,然后用addChild()/addChilaAt()加入到容器,当不需要的时候用removeChild()/removeChildAt()从容器中把它删除; 当成批产生物件时,for循环结合数组能很好的解决问题。 看个实例先, (申明: 这个实例来自风云II系列丛书之Flashcs3ActionScript3.0游戏开发基础与范例,版权都属原作者所有) 这里本人不篡改原作,只做个搬运工。 (1)首先,启动flashcs3; (2)选择文件>新建菜单命令,选择新建一个ActionScript3.0文档; (3)保存这个fla文件为Sample7_5.fla; (4)给主场景添加一个背景。 修改主场景的帧频为30fps,填写文档类为objclasses。 ObjSample,如下图所示; (5)创建一个金币的影片剪辑,保存到库中,在库中选择它,修改它的连接属性为外部类objclasses.Obj,如下图所示,这个金币将是这个例子中动态创建和删除的对象。 (6)在fla文件存在的目录下创建objclasses文件夹; (7)在objclasses文件夹中创建Obj.as和ObjSample.as两个as文件 (8)编写如下代码清单Obj.as所示的代码: packageobjclasses{ importflash.display.MovieClip; importflash.events.Event; //对象类 publicclassObjextendsMovieClip{ //速度属性 privatevarspeed: Number; functionObj(): void{ speed=0; this.addEventListener(Event.ENTER_FRAME,onFrameHandler); } //在ENTER_FRAME的响应函数中随机产生一个速度 //并使对象按照这个速度向下移动 privatefunctiononFrameHandler(event: Event): void{ speed=Math.floor(Math.random()*3)+1; this.y+=speed; } } } (9)编写代码清单ObjSample.as所示的代码: packageobjclasses{ importflash.display.MovieClip; importflash.utils.Timer; importflash.events.TimerEvent; //对象例子的类 publicclassObjSample2extendsMovieClip{ //声明一个1秒间隔的Timer实例 privatevarmytimer: Timer=newTimer(1000); //声明一个存储对象的数组 privatevararrObj: Array=newArray(); //构造函数中添加TIMER事件,并启动该计时器 functionObjSample2(): void{ mytimer.addEventListener(TimerEvent.TIMER,onTimerHandler); mytimer.start(); } //TIMER事件响应函数 //每秒创建一个新对象,X坐标随机产生 privatefunctiononTimerHandler(event: TimerEvent): void{ varobj: Obj=newObj(); obj.x=Math.floor(Math.random()*500)+25; obj.y=0; addChild(obj); //添加到对象数组中 arrObj.push(obj); //消除Y坐标大于200的对象 for(vari: int=0;i if(arrObj[i].y>200){ //从场景中消除 removeChild(arrObj[i]); //从数组中消除 arrObj.splice(i,1); break; } } } } } 测试影片 可能很多地方没有说清楚。 欢迎批评指教。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Flash 入门 必备 开发 AS 代码 游戏 制作 过程 例子