很多人讨论马里奥阿..........这里贴一个我以前写的冬冬
我们要实现的是 一个能够很方便的制作地图 的复杂地图,而且让主角能够自动的在地图上移动和跳跃。而且能够通过按键时间控制跳跃高度。
如何开始呢?
首先画一个矩形,按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;
}
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |