毕业论文 论文提纲 论文写作 公文范例 教育论文 教育学论文 师范教育 学术论文     论文指导*
                     
 
   
   
   
   
           
 

当前位置:课件115学培吧(kj115.com)→FLASH课件游戏开发教程→文章系列

 
 
标题:教你FLASH游戏编程
 
展示台

文章来源 作者:admin 密码:admin 整理:湖北金鹰

◇游戏开发栏目简介
内容是FLASH课件游戏制作教程,适合开发课件游戏,增加课件的感染力,适合高手学习,基础学习者可以参加我站的游戏开发视频教程的学习是最佳之选。

其它教程文章还有网侠教程图文教程等。
学习过程中如果需要相关的软件下载,你可以到本站软件下载专区去看看。

---------------

论文相关服务
 

湖北金鹰课件吧

第(1)课——制作重力场从今天开始会给大家讲解FLASH游戏编程的问题(高手不要笑我),因为本人能力有限,所以也只能是抛砖引玉啦。
言归正传。
因为游戏环境并不象FLASH动画一样可以预先作好关键帧,所以在处理“运动”这一问题时就要创造自己的运动规律,让场景内的物体按“规律”去自己运动。我们最熟悉,每天都会接触到的就是重力场了。对于FLASH编程中所涉及到的重力及重力加速度并不用按实际数值引用,你只要记得那是一个常量就行了。其实重力场是一个非常单纯的力场,他只涉及到一个垂直的力。重力加速度就是物体沿垂直方向运动的速度的增量。有了这些基本概念,就可以摸似出似真的重力场了。
来看看AS方面——
首先在场景中制作一个圆形,将它转化为MC,实例名取为“ball”,在第一帧上加入:
ymov=0;
gravity=2;
_root.onEnterFrame=function(){
ymov+=gravity;
ball._y+=ymov;
if(ball._y>400){
ball._y=400;
ymov*=-0.9;
}
};
这里设定初速度为0,重力加速度为2,当球运动到400的位置时开始反弹。在理想状态下应该是获得一个相反的速度,即最后一句应该是ymov*=-1。但考虑到我们平时所见到的情况并不是球在毫无能量损失的状态下运动的。我们把它的速度减少了10%,以摸拟在反弹时的能量损失。
有了重力场,我们就可以来看看一个本来水平运动的球会怎样受到重力的影响。在球上加入AS——
onClipEvent(enterFrame){
speed=4;
this._x+=speed;
if(this._x>400){
this._x=0;
}
}
球会沿X轴以速度4向右移动,这里的判断语句if(this._x>400){this._x=0;}是说当球运动到水平400个单位时将出现在X=0的坐标上。这也是我们在玩游戏时经常遇到的情况:你的飞机从画面上方飞出,又从画面下方出现。
当球的水平运动与重力场同时作用到球上时,我们便可以看到相当逼真的运动效果了。
第(2)课——初级碰撞今天给大家介绍碰撞问题的初级解决方案。之所以称这一课初级碰撞,其主要原因是因为我们所借助的检测手段是hitTest。这个函数在碰撞问题上要遇到2个瓶颈:
1.它在很大程度上要依赖于MC的边框
2.当你面对一个非常快的动作(比如前一帧2个物体还没有接触,而后一帧则已经互相穿了过去)
这两个瓶颈是hitTest所无法解决的问题,我们将在下一课(高级碰撞)中向大家介绍更为科学的数学方法。
回到hitTest上来,它的标准语法是:myMovieClip.hitTest(target_MovieClip)。记得我们说过的瓶颈吗?它无法真正的检测到MC之间的互相碰撞。只要两个MC的边界*(作一个任意形状的MC,你会发现在它周围有一个矩形的虚线边框,就是它了)相交叠就会判定为碰撞了。虽然这种方法有很多局限性,但如果对象类似于矩形,同时运动速度又不太快,还是有一定的用武之地的。
HitTest的另一种用法是检验MC与特定坐标的碰撞,常见的语法是myMovieClip.hitTest(x,y,true)。最后这个布尔值true是可选的,当其为true时可以严格检测到MC与特定坐标的碰撞情况。当它为false或缺省时则会检测矩形边偶范围内的所有部分与坐标的碰撞。
在很多鼠标事件中我们常可以看到这样的语法:myMovieClip.hitTest(_xmouse,_ymouse,true)。
第(3)课——动量守恒与能量守恒因为时间不是很多,所以只能告诉大家碰撞要作到逼真就一定要遵守动量守恒和能量守恒定律。
下面是两个方块相互碰撞的例子——
源代码如下——
//设定第一个方块的初始值;
rectangle1={};
rectangle1.clip=rectangle_a;
rectangle1.x=rectangle1.clip._x;
rectangle1.y=rectangle1.clip._y;
rectangle1.height=rectangle1.clip._height;
rectangle1.width=rectangle1.clip._width;
rectangle1.xmov=3;
rectangle1.ymov=0;
rectangle1.mass=1;
//
//设定第二个方块的初始值;
rectangle2={};
rectangle2.clip=rectangle_b;
rectangle2.x=rectangle2.clip._x;
rectangle2.y=rectangle2.clip._y;
rectangle2.height=rectangle2.clip._height;
rectangle2.width=rectangle2.clip._width;
rectangle2.xmov=-2;
rectangle2.ymov=0;
rectangle2.mass=2;
//
functionreaction(a,b){
varm1=a.mass;
varm2=b.mass;
varv1i=a.xmov;
varv2i=b.xmov;
varp=m1*v1i+m2*v2i;
varv=v1i-v2i;
//根据动量守恒和动能守恒定理计算出碰撞后的速度;
varv2f=(p+m1*v)/(m1+m2);
varv1f=v2f-v;
a.xmov=v1f;
b.xmov=v2f;
a.tempx=a.x+a.xmov;
b.tempx=b.x+b.xmov;
}
//
functiongetTemPos(){
rectangle1.tempx=rectangle1.x+rectangle1.xmov;
rectangle1.tempy=rectangle1.y+rectangle1.ymov;
rectangle2.tempx=rectangle2.x+rectangle2.xmov;
rectangle2.tempy=rectangle2.y+rectangle2.ymov;
}
//
functionrender(){
rectangle1.x=rectangle1.tempx;
rectangle1.y=rectangle1.tempy;
rectangle1.clip._x=rectangle1.x;
rectangle1.clip._y=rectangle1.y;
rectangle2.x=rectangle2.tempx;
rectangle2.y=rectangle2.tempy;
rectangle2.clip._x=rectangle2.x;
rectangle2.clip._y=rectangle2.y;
}
//
functionrectangleDetection(r1,r2){
//r1的左右两个边界;
varx_a1=r1.x;
varx_a2=r1.x+r1.width;
//r1的上下两个边界;
vary_a1=r1.y;
vary_a2=r1.y+r1.height;
//r2的左右两个边界;
varx_b1=r2.x;
varx_b2=r2.x+r2.width;
//r2的上下两个边界;
vary_b1=r2.y;
vary_b2=r2.y+r2.height;
//检测是否发生碰撞;
if((x_a2>x_b1&&x_a1y_b1&&y_a1reaction(r1,r2);
}
}
_root.onEnterFrame=function(){
getTemPos();
rectangleDetection(rectangle1,rectangle2);
render();
};
第(4)课——游戏场景TBW技术
所谓TBW技术就是tile-basedworlds的缩写。
很多朋友在刚开始尝试制作游戏场景的时候都会去动手绘制版图,不过这样并不是一个“专业”游戏制作者的风格。比如闪吧前几天就看到了有朋友在制作“坦克大战”,完全没有规划过的版图设定使得各种属性的实现变得极为复杂。
在TBW技术中,你所要作的就是将地形浓缩为一个MC,它有很多帧*(具体看你的地形种类),然后将这个MC整齐地排列成组,再利用参数来调用其中的特定帧以实现不同的环境效果。这样作的另外一个好处是你可以灵活地控制场景的特定属性。比如你可以设定当你的角色走入“水”中时速度会慢下来,进入“地雷阵”则会被炸飞……等等。
接下来这段mc我加入了用鼠标控制单元格变换的指令,你可以通过按键来变换不同的地形。在以后的内容中我会给大家介绍自制“地图编辑器”,这样在完成游戏后你可以利用“编辑器”来制作不同的关。
第(5)课——场景的制作和调用(上)
上次给大家讲了用TBW来实现游戏场景的基本概念,今天来介绍一下如何自己编辑基于TBW的地图,以及对已经编辑好的地图的调用。
在上次的介绍中,我们已经通过AS实现了鼠标点击来更换“地形”的功能,其实这已经是地图编辑器的一部分功能了,我们只要把经过点击更换后的地形类型记录下来就可以了。看下面的AS——
functioncreateXML(){
varxml="";
for(j=1;j<=game.rows;j++){
xml+="";
for(i=1;i<=game.columns;i++){
varname="cell"+i+"_"+j;
vartype=game[name].type;
varnode="";
xml+=node;
}
xml+="";
}
xml+="";
trace(xml);
}
熟悉AS的朋友可以看出,上面的function只是将某种“特定”的结构付给了xml这个变量,我们在场景中设置一个按钮(比如我下面例子中的“产生XML”这个按钮),当点击按钮时则调用此函数,这样在点击时便可以trace出一个标准的xml档案,在output栏中点击右键,另存为xml型文件(我的是产生一个名为“Level1.xml”.
这样,我们便可以把编辑好的地图输出为一个xml文档了。
另,由于trace是一个测试用函数,所以在SWF文件是没法看到输出情况的,只有在你自己编制的fla文件中才可以进行地图的编辑记录。在正式的游戏版本中,要记得将鼠标改变地形和产生XML等功能去掉。这样一来,你的游戏编程将分为两个版本——开发版本和客户端,在开发版本中你可以自己编辑地图,设置属性等;而客户端的主要功能则要实现可以调用已编制好的“地图”。
第(6)课——用等距视点表现3D立体世界
由于已经进行了坐标系的转换,所以现在按方向键的话可以让球体在新坐标中进行移动了。另外按空格键可以把小球“拍”起来,当然在空中也是可以控制球体的运动的,影子也会随着球体一起活动,球本身也遵循自由落体运动。

 

 
课件115学培吧(湖北金鹰)欢迎您!永久免费服务网址:http://www.kj115.com
   
 

学员众多的FLASH课件学习基地,成万免费FLASH课件制作教程在线学习,还有免费内容课件教程、视频教程、课件技巧、课件探讨、课件欣赏、课件展示、实用教程、课件界面、课件脚本、课件游戏、课件下载、课件封面、课文内容图片、课文人物图片库、课件素材、图片素材、声音素材、动物素材、背景图片、背景资料、背景边框、课件顶栏图片素材、Dreamweaver教程、Dreamweaver网页课件教程、软件下载。承接学习和培训,承接课件订制,课件修改等所有课件相关服务。
本站主要业务:┃flash课件制作视频教程培训┃承接全国竞赛flash课件┃论文代写代发┃代办课件国家级获奖证书┃
联系:QQ:444860709 手机:13339817386


 
 

业务办理
鄂ICP备08005724号