Flash入门必备Flash开发AS代码之游戏制作过程例子.docx

上传人:b****7 文档编号:9676216 上传时间:2023-02-05 格式:DOCX 页数:27 大小:427.13KB
下载 相关 举报
Flash入门必备Flash开发AS代码之游戏制作过程例子.docx_第1页
第1页 / 共27页
Flash入门必备Flash开发AS代码之游戏制作过程例子.docx_第2页
第2页 / 共27页
Flash入门必备Flash开发AS代码之游戏制作过程例子.docx_第3页
第3页 / 共27页
Flash入门必备Flash开发AS代码之游戏制作过程例子.docx_第4页
第4页 / 共27页
Flash入门必备Flash开发AS代码之游戏制作过程例子.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

Flash入门必备Flash开发AS代码之游戏制作过程例子.docx

《Flash入门必备Flash开发AS代码之游戏制作过程例子.docx》由会员分享,可在线阅读,更多相关《Flash入门必备Flash开发AS代码之游戏制作过程例子.docx(27页珍藏版)》请在冰豆网上搜索。

Flash入门必备Flash开发AS代码之游戏制作过程例子.docx

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;

}

}

}

}

}

测试影片

可能很多地方没有说清楚。

欢迎批评指教。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 预防医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1