飞机游戏的注释、源码 |
| 作者:佚名 来源:闪吧 作者: ycccc8202 更新:2007-1-13 20:43:25 错误报告 我要投稿 |
主要代码解释如下:
init(); function init() { black.swapDepths(4000); //设置遮挡的外框的深度 Var(); hit_text(); //"击倒数"文本框 setFly(); //飞机主角的初始化 Trans(); //程序的运行 return_col(); //游戏over进行重来的控制 Fps(); } function Var() { stage_width = 300; stage_height = 300; //设置这两个变量分别为场景的宽度和高度 this.createEmptyMovieClip("enemy_mc", 1); //建立个元件用来放置敌人 this.createEmptyMovieClip("bullet_mc", 2); //建立个元件用来放置子弹 bullet_depth = 0; enemy_depth = 0; //初始化子弹和敌人的深度 hit_num = 0; //初始化击中的数目 life._xscale = 100; //初始化生命槽的宽度 oldtime = getTimer(); //用来存储游戏开始的时间,在下面对按"ctrl"发射键的按下时长判断 } function hit_text() { this.createTextField("h_num", 1000, 5, 1, 100, 20); //创建一个文本用来显示击倒敌机数的 num_format = new TextFormat(); num_format.color = 0xb8e0f0; h_num.text = "击倒"+0; h_num.type = "dynamic"; h_num.border = true; h_num.borderColor = 0xffffff; h_num.color = 0xffffff; h_num.setTextFormat(num_format); h_num.autoSize = "left"; //都是设置这个文本的一些属性 } function setFly() { this.attachMovie("fly", "fly", 0); //调库中的飞机元件 fly._xscale = fly._yscale=150; //设置飞机的初始大小 fly._x = 150; fly._y = 250; //设置飞机的初始位置 fly_speed = 5; } function control() { //飞机的上下左右控制 if (Key.isDown(Key.LEFT)) { fly._x -= fly_speed; } if (Key.isDown(Key.UP)) { fly._y -= fly_speed; } if (Key.isDown(Key.RIGHT)) { fly._x += fly_speed; } if (Key.isDown(Key.DOWN)) { fly._y += fly_speed; } } function Range(mc) { //对超出边界的判断 if (mc._x<=mc._width/2) { mc._x = mc._width/2; } if (mc._x>=stage_width-mc._width/2) { mc._x = stage_width-mc._width/2; } if (mc._y>=stage_height-mc._height/2) { mc._y = stage_height-mc._height/2; } if (mc._y<=mc._height/2) { mc._y = mc._height/2; } } function shoot() { //子弹的发射 if (fly != undefined) { //如果飞机存在的话 var bulletSpeed = 10; //设置子弹的速度 if (Key.isDown(Key.CONTROL) and getTimer()-oldtime>200) { //按下空格并且两次按键的时间差>200毫秒 oldtime = getTimer(); //又将当前时间存储到oldtime变量中 for (var i = -40; i<=40; i += 20) { //范围就在-40度到40度之间,间隙为20度 Bullet = bullet_mc.attachMovie("bullet", "bullet"+bullet_depth, bullet_depth++); //调库中的子弹 Bullet._x = fly._x; Bullet._y = fly._y-20; Bullet._xscale = Bullet._yscale=30+(hit_num/10)*10; if (Bullet._xscale>100) { Bullet._xscale = Bullet._yscale=100; } //初始子弹开始发射的位置,子弹的大小根据杀敌数目来加粗,最大为100的比例 Bullet._rotation = i; //子弹的角度 arg = (90-i)/180*Math.PI; //由于开始的时候子弹我是向上放置,这时候会默认为0度,所以要用90减,得到实际的弧度 Bullet.xinc = Math.cos(arg)*bulletSpeed; Bullet.yinc = Math.sin(arg)*bulletSpeed; //子弹xy方向上的分速度 Bullet.onEnterFrame = function() { //每个子弹逐桢执行 for (var k in enemy_mc) { if (enemy_mc[k].enemy_body.hitTest(this)) { //如果敌人碰到了子弹,我这里用hittext做的,其实还可以用dis距离来判断. hit_num++; //杀敌数+1 h_num.text = "击倒"+hit_num; //文本内显示出来 h_num.setTextFormat(num_format); //文本的一个设置 enemy_mc[k].speed = 0; //敌人速度为0,停下来. enemy_mc[k].gotoAndPlay("enemy_dead"); //跳到爆炸的画面 this.removeMovieClip(); //删除这个子弹 } } if (this._y<0 or this._x<0 or this._x>stage_width) { this.removeMovieClip(); //如果子弹出界,也删除掉 } this._x += this.xinc; this._y -= this.yinc; //设置子弹的位置,方向向上 }; } } } } function enemySet() { Enemy = enemy_mc.attachMovie("enemy", "enemy"+enemy_depth, enemy_depth++); // 调库中的敌人 temp_fly_x = fly._x; temp_fly_y = fly._y; // 当前飞机的位置 aa = x_y_random(); // 调用敌人出来位置的方法 Enemy._x = aa[0]; Enemy._y = aa[1]; //设置敌人出来的位置 Enemy.speed = 5; //每个敌人的速度 Enemy.radia = (fly == undefined) ? Math.atan2(300-Enemy._y, random(300)-Enemy._x) : Math.atan2(temp_fly_y-Enemy._y, temp_fly_x-Enemy._x); // 如果飞机存在的话,敌人飞向的角度为下方的一个随机位置,否则敌人飞向的角度为飞机主角的方向 Enemy.onEnterFrame = function() { //每个敌人自身的逐桢运行 this._rotation += 20; //角度不断+20,就产生了敌人的旋转 if (this.enemy_body.hitTest(fly.f_fly._fly)) { //如果敌人接触到飞机主角 this.speed = 0; //敌人的速度也为0 this.gotoAndPlay("enemy_dead"); //跳到爆炸的画面 life._xscale -= 4; //血槽的宽度减小 if (life._xscale<=0) { life._xscale = 0; fly.gotoAndPlay("dead"); } else { fly.play(); } //如果血宽度为0,飞机就跳转到失败的画面,否则飞机就运行闪一下的动画 } if (this._x<0 or this._x>stage_width or this._y>stage_height or this._y<0) { this.removeMovieClip(); } //如果敌人出界就删除敌人 this._x += this.speed*Math.cos(this.radia); this._y += this.speed*Math.sin(this.radia); //敌人x,y方向上的分速度 }; } function x_y_random() { //敌人出来随机位置的方法 var s = []; var ran = random(3); switch (ran) { case 0 : s[0] = random(300); s[1] = 0; break; case 1 : s[0] = 0; s[1] = random(300); break; case 2 : s[0] = 300; s[1] = random(300); } return s; } //这里是设置敌人从左上右三个面出来 function Trans() { enemy_time = 0; //初始化个时间 this.onEnterFrame = function() { control(); Range(fly); shoot(); if (++enemy_time>15) { // 如果时间间隔大于15桢,这里是设置敌人每隔15桢的时间出来一个 enemy_time = 0; // 然后又返回0 enemySet(); //调用敌人 } }; } function return_col() { this.onKeyDown = function() { if (Key.isDown(Key.SPACE) and fly == undefined) { for (var i = 1; i<=40; i++) { enemy_mc.removeMovieClip(); bullet_mc.removeMovieClip(); } //如果按下空格键并业飞机不存在的话,就删除子弹元件和敌人敌人元件 Var(); setFly(); load_con(); Trans(); //重新执行 } }; Key.addListener(this); } function Fps() { //显示影片的fps值 _fps = 0; fps_mc.fps = ""; setInterval(function () { fps_mc.fps = _fps; _fps = 0; }, 1000); fps_mc.onEnterFrame = function() { _fps++; }; }
//恩...差不多就这样了.把原文件也发给大家: )...
由于原文件给弄丢了,所以用破解软件弄了元件出来重新做了下。
点击浏览该文件
点击浏览该文件
|
|
| 文章录入:skyuu 责任编辑:skyuu |
|
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |