|
三、代码控制
1.回到主场景,把第一个图层改名为“start”,在第一帧中插入关键帧,帧动作为:
function clean() { for (i in _root) { _root[i].removeMovieClip(); } } _root.clean(); stop();
clean函数用来删除所有多余的影片剪辑,它的功能在第一次运行时没有作用,而在游戏运行后,“plane”的生命值为零时返回这一帧,如果没有clean函数,将出现无数个被复制的影片剪辑。
2.把“start”按钮和“exit”按钮拖入场景中,“start”按钮的动作脚本为
on(release){ //释放鼠标时进入第三帧,开始游戏 gotoAndPlay(3); }
“exit”按钮的动作脚本为
on (release) { //释放鼠标时,退出游戏 fscommand("quit", "1"); }
3.添加第二层,命名为“victor”,在该层第二帧中插入关键帧,在场景中用文字工具写入“you win”,设置字号为84,颜色为黄色。也插入“start”和“exit”按钮,动作脚本同上。
4.添加第三层,命名为“action”,在该层第三帧插入关键帧,写入代码如下:
enemyNumber=5 //每次画面中出现五个敌人 for(i=0;i<enemyNumber;i++) { //如果画面中敌人数小于五,则复制出敌人的影片剪辑 duplicateMovieClip("enemy","new"+i,30+i) } life=100 //生命值为100 score=0; //开始得分为 0 stop( );
5.在该帧场景中添加两个静态文本框和两个动态文本框,用来表示生命值和得分。静态文本框内的内容分别是“生命”和“得分”,第一个动态文本框命变量值为life,第二个动态文本框的变量值为score。

6.再增加两个图层,一个命名为 “plane”,一个命名为“enemy”,并分别在第三帧插入关键帧。选中“plane”层的第三帧,把“plane”拖入,剪辑名称为“ship”。选中“enemy”层的第三帧,把“enemy”和“ball”剪辑拖入,剪辑名称分别为“enemy”和“enemylaser”。

右击“plane”剪辑,在动作面板里写入代码:
onClipEvent (load) { //载入时进行初始化 speed=6; sy=_y; ang=0; }
onClipEvent (enterFrame) { _y = sy + 4 * Math.cos(ang+=0.092); //用cos函可以是飞机有在空中飘动的效果 c=_root . score; //给c 变量赋值,初试状态为“0” if(c>=500){ //如果c的值(得分)大于500,则胜利结束游戏 _root.gotoAndStop(2); } if(_root.life<=0){ //如果生命值小于0,则重新开始游戏或退出 _root.gotoAndStop(1);
}
//当玩家按下上、下、左、右方向键时,飞机可以移动
if (Key.isDown(Key.down)and _y<400) {_y += speed; sy+=speed} if (Key.isDown(Key.up) and _y>0) {_y -= speed; sy-=speed} if (Key.isDown(Key. right) and _X<550) {_x += speed;} if (Key.isDown(Key.left) and _X>0) {_x -= speed;} if (Key.isDown(Key.space)) {//当按下空格键时,飞机开火,用了一个变量a,使每按一下空格发出一发炮弹,如果不设置这个变量,那么当按下空格键时,炮弹将连续飞出。 if (!a) { //如果a为false shotCount++; depth=(shotCount%100)+100 _root.attachMovie("laser", "sparo"+shotCount, depth); //attachmovie方法是从库中直接调用复制影片剪辑“fire”,它的标识符为“laser”。 _root["sparo"+shotCount]._x = this._x+(_width-45) _root["sparo"+shotCount]._y = this._y; //复制出的“fire”剪辑的初试位置。 a = true;
} } else {a = false;} }
7.右击“enemy”剪辑,在“动作”面板里设置代码
onClipEvent (load) { sy=random (400)+10; //取随机数 function reset(){ ship1.gotoAndStop(1); speed=random(10)+2; //敌机的飞行速度是一个随机数 _y= random(300)+_height; //敌机的初始y坐标取随机数 _x= 550+_y; _root.firePower=100 ;
} reset() }
onClipEvent (enterFrame) { if(this.ship1._currentframe==1){ //敌机剪辑在第一帧 _y = sy + speed * Math.cos(speed+=0.032); //敌机飞行时有浮动的效果 if(this.hitTest(_root.ship)){ //如果该剪辑与战斗机相撞 ship1.gotoAndStop(2); //敌机爆炸 _root.ship.play(); _root.life-=10; //生命值减10 } if(random(_root.firePower)+1==10){ Count++; depth=(Count%100)+200; //敌机飞行时发出炮弹 duplicateMovieClip(_root.enemyLaser, "num"+Count, depth); //炮弹的初始坐标就是敌机当前所在位置的坐标 _root["num"+Count]._x=this._x-40 _root["num"+Count]._y=this._y } } _x-=speed if(_x<-10) { reset()}
}
|