我们要实现的是 一个能够很方便的制作地图 的复杂地图,而且让主角能够自动的在地图上移动和跳跃。而且能够通过按键时间控制跳跃高度。
如何开始呢?
首先,所有地板mc都是在 _root.背景 这个里面的。每个地板都是一个矩形的mc。
把他们都放在在 _root.背景 的好处是:
1 可以用循环
for( var i in _root.背景 ){
_root.背景[i]...........
}
这样访问所有地板(注意最好是正方形的mc,其他形状以后有时间再讨论),而不需要知道有多少块地板、它们在什么位置。
2 如果需要背景移动,正如我以前说过的,只需要移动 _root.背景 这个mc,所有地板都会一起移动。
好了,画一个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.背景[i])){ landobject = _root.背景[i]; 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; } |