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; } |