act中多块地板和跳跃的实现 |
| 作者:佚名 来源:闪吧 作者: ox_thedarkness 更新:2007-1-13 20:49:09 错误报告 我要投稿 |
我们要实现的是 一个能够很方便的制作地图 的复杂地图,而且让主角能够自动的在地图上移动和跳跃。而且能够通过按键时间控制跳跃高度。 如何开始呢?
首先,所有地板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; }
|
restart按钮的代码很简单,在这里我省了。 <源文件01>
点击浏览该文件
点击浏览该文件 空格跳跃, 掉下去找不到人了就按restart 能够根据空格按下的时间控制跳跃高度
|
|
| 文章录入:skyuu 责任编辑:skyuu |
|
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |