论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash AS编程教程
Tag:2.0,3.0菜鸟,游戏,,cs,技巧,源码,,文本,文字,函数,音乐,随机,拖拽,asp,access,xml,mc,视频教程

中动作游戏中多块地板和跳跃的实现

文章类别:Flash AS编程 | 发表日期:2008-10-6 17:35:33


很多人讨论马里奥阿..........这里贴一个我以前写的冬冬

我们要实现的是 一个能够很方便的制作地图 的复杂地图,而且让主角能够自动的在地图上移动和跳跃。而且能够通过按键时间控制跳跃高度。
如何开始呢?

首先画一个矩形,按F8转换成MC(MovieClip电影剪辑)元件名叫判定。专门制作“判定”主要是为了处理方便,而且把画面和游戏内核分开。
从库(F11)中拖放很多个判定MC到场景上,形成你要的场景,用自由变换工具(Q)把所有地板MC编辑成合适的大小。好了,我们的场景上高低起伏的地形做好了。选中所有的判定,F8变成一个新的MC,元件名随便比如叫第一关,F9打开属性页,左边有一个<InstanceName>或者<实例名>,取名叫做背景。
这样 _root.背景 这个mc里面就有大量的判定MC,我们的地图判定就做好了。
把他们都放在在 _root.背景 的好处是:

1 可以用循环
for( var i in _root.背景 ){
_root.背景...........
}
这样访问所有地板(注意最好是正方形的MC,其他形状以后有时间再讨论),而不需要知道有多少块地板、它们在什么位置。

2 如果需要背景移动,正如我以前说过的,只需要移动 _root.背景 这个MC,所有地板都会一起移动。



onClipEvent(load){
 var xStart = _x;
//初始的_x和_y,按了Restart之后主角的坐标恢复到这个数字
 var yStart = _y;
 var yinc = 0;  
//垂直速度
 var g = 1;  
//垂直(重力)加速度
 var inAir = true;
//是否空中
 var moveSpeed = 8;
//主角的移动速度
 var jumpSpeed = -15;
//跳跃垂直初速度
 var landObject = null;
//当前脚下的物体
 var spacePressed = false;
//空格键是否按下
}

onClipEvent(enterFrame){
 
//抛物线和自由落体,如果目前在空中的话
 if(inAir){
  yinc += g;  
//yinc, y轴速度变大,g是重力加速度
   _y += yinc;  
//物体坐标+= yinc,物体根据当前速度下落
 
//如果在下落中(yinc>0),监测是否落到地面
  if(yinc >0){
   for(var i in _root.背景){
    if (hitTest(_root.背景)){
     landObject = _root.背景;
     var newy = landObject.getBounds(_root).yMin;
//得到地板的上表面
     if (_y - yinc < newy){
//如果该块地板在自己脚下,那么就落地了
      _y = newy;
      inAir = false;
      break;
     }else landObject = null;
    }
   }
  }
 }else{
//如果主角不在空中,让主角下落一个像素,测试是否和脚下的物体碰撞。如果不和脚下物体碰撞,证明脚下空了
  if(! hitTest(landObject) ){
//发现下面空了
   yinc = 1;
   inAir = true;
  }
 }
 
//按空格跳跃
 if(Key.isDown(Key.SPACE) && !spacePressed){
  spacePressed = true;
  if(!inAir){
   yinc = jumpSpeed;
   inAir = true;
  }
 }else if(!Key.isDown(Key.SPACE) && spacePressed){
//空格键松开就落下来,注意这里的处理方法
  spacePressed = false;
  if (yinc < -5) {
   yinc += 8;
   if (yinc >0) yinc = 0;
  }
 }
 
//方向控制左右移动,和垂直加速运动合到一起就是自然的抛物线
 if (Key.isDown( Key.LEFT )) _x -= moveSpeed;
 if (Key.isDown( Key.RIGHT )) _x += moveSpeed;
}


 

视频教程列表
文章教程搜索
 
Flash AS推荐教程
Flash AS热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058