在好例子网,分享、交流、成长!
您当前所在位置:首页js 开发实例网页游戏 → egret飞机大战源码

egret飞机大战源码

网页游戏

下载此实例
  • 开发语言:js
  • 实例大小:1.86M
  • 下载次数:38
  • 浏览次数:1250
  • 发布时间:2017-12-07
  • 实例类别:网页游戏
  • 发 布 人:linwenca
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 飞机大战 Egret

同类人气实例

实例介绍

【实例简介】

用egret游戏框架做的飞机大战

【实例截图】

【核心代码】

module fighter
{ /**  * 主游戏容器  */  export class GameContainer extends egret.DisplayObjectContainer
    { /**@private*/  private stageW:number; /**@private*/  private stageH:number; /**开始按钮*/  private btnStart; /**可滚动背景*/  private bg:fighter.BgMap; /**我的飞机*/  private myFighter:fighter.Airplane; /**我的子弹*/  private myBullets:fighter.Bullet[] = []; /**敌人的飞机*/  private enemyFighters:fighter.Airplane[] = []; /**触发创建敌机的间隔*/  private enemyFightersTimer:egret.Timer = new egret.Timer(1000); /**敌人的子弹*/  private enemyBullets:fighter.Bullet[] = []; /**成绩显示*/  private scorePanel:fighter.ScorePanel; /**我的成绩*/  private myScore:number = 0; /**@private*/  private _lastTime:number; public constructor() { super(); this._lastTime = egret.getTimer(); this.addEventListener(egret.Event.ADDED_TO_STAGE,this.onAddToStage,this);
        } /**初始化*/  private onAddToStage(event:egret.Event){ this.removeEventListener(egret.Event.ADDED_TO_STAGE,this.onAddToStage,this); this.createGameScene();
        } /**创建游戏场景*/  private createGameScene():void{ this.stageW = this.stage.stageWidth; this.stageH = this.stage.stageHeight; //背景  this.bg = new fighter.BgMap();//创建可滚动的背景  this.addChild(this.bg); //开始按钮  //开始按钮  this.btnStart = fighter.createBitmapByName("btnStart");//开始按钮  this.btnStart.x = (this.stageW - this.btnStart.width) / 2;//居中定位  this.btnStart.y = (this.stageH - this.btnStart.height) / 2;//居中定位  this.btnStart.touchEnabled = true;//开启触碰  this.btnStart.addEventListener(egret.TouchEvent.TOUCH_TAP,this.gameStart,this);//点击按钮开始游戏  this.addChild(this.btnStart); //我的飞机  this.myFighter = new fighter.Airplane(RES.getRes("f1"),100,"f1"); this.myFighter.y = this.stageH-this.myFighter.height-50; this.addChild(this.myFighter); this.scorePanel = new fighter.ScorePanel(); //预创建  this.preCreatedInstance();
        } /**预创建一些对象,减少游戏时的创建消耗*/  private preCreatedInstance():void { var i:number = 0; var objArr:any[] = []; for(i=0;i<20;i  ) { var bullet = fighter.Bullet.produce("b1"); objArr.push(bullet);
            } for(i=0;i<20;i  ) {
                bullet = objArr.pop();
                fighter.Bullet.reclaim(bullet);
            } for(i=0;i<20;i  ) { var bullet = fighter.Bullet.produce("b2"); objArr.push(bullet);
            } for(i=0;i<20;i  ) {
                bullet = objArr.pop();
                fighter.Bullet.reclaim(bullet);
            } for(i=0;i<20;i  ) { var enemyFighter:fighter.Airplane = fighter.Airplane.produce("f2",1000); objArr.push(enemyFighter);
            } for(i=0;i<20;i  ) {
                enemyFighter = objArr.pop();
                fighter.Airplane.reclaim(enemyFighter);
            }
        } /**游戏开始*/  private gameStart():void{ this.myScore = 0; this.removeChild(this.btnStart); this.bg.start(); this.touchEnabled=true; this.addEventListener(egret.Event.ENTER_FRAME,this.gameViewUpdate,this); this.addEventListener(egret.TouchEvent.TOUCH_MOVE,this.touchHandler,this); this.myFighter.x = (this.stageW-this.myFighter.width)/2; this.myFighter.fire();//开火  this.myFighter.blood = 10; this.myFighter.addEventListener("createBullet",this.createBulletHandler,this); this.enemyFightersTimer.addEventListener(egret.TimerEvent.TIMER,this.createEnemyFighter,this); this.enemyFightersTimer.start(); if(this.scorePanel.parent==this) this.removeChild(this.scorePanel);
        } /**响应Touch*/  private touchHandler(evt:egret.TouchEvent):void{ if(evt.type==egret.TouchEvent.TOUCH_MOVE)
            { var tx:number = evt.localX; tx = Math.max(0,tx); tx = Math.min(this.stageW-this.myFighter.width,tx); this.myFighter.x = tx;
            }
        } /**创建子弹(包括我的子弹和敌机的子弹)*/  private createBulletHandler(evt:egret.Event):void{ var bullet:fighter.Bullet; if(evt.target==this.myFighter) { for(var i:number=0;i<2;i  ) { bullet = fighter.Bullet.produce("b1"); bullet.x = i==0?(this.myFighter.x 10):(this.myFighter.x this.myFighter.width-22); bullet.y = this.myFighter.y 30; this.addChildAt(bullet,this.numChildren-1-this.enemyFighters.length); this.myBullets.push(bullet);
                }
            } else { var theFighter:fighter.Airplane = evt.target; bullet = fighter.Bullet.produce("b2"); bullet.x = theFighter.x 28; bullet.y = theFighter.y 10; this.addChildAt(bullet,this.numChildren-1-this.enemyFighters.length); this.enemyBullets.push(bullet);
            }
        } /**创建敌机*/  private createEnemyFighter(evt:egret.TimerEvent):void{ var enemyFighter:fighter.Airplane = fighter.Airplane.produce("f2",1000); enemyFighter.x = Math.random()*(this.stageW-enemyFighter.width); enemyFighter.y = -enemyFighter.height-Math.random()*300; enemyFighter.addEventListener("createBullet",this.createBulletHandler,this); enemyFighter.fire(); this.addChildAt(enemyFighter,this.numChildren-1); this.enemyFighters.push(enemyFighter);
        } /**游戏画面更新*/  private gameViewUpdate(evt:egret.Event):void{ //为了防止FPS下降造成回收慢,生成快,进而导致DRAW数量失控,需要计算一个系数,当FPS下降的时候,让运动速度加快  var nowTime:number = egret.getTimer(); var fps:number = 1000/(nowTime-this._lastTime); this._lastTime = nowTime; var speedOffset:number = 60/fps; //我的子弹运动  var i:number = 0; var bullet:fighter.Bullet; var myBulletsCount:number = this.myBullets.length; for(;i < myBulletsCount;i  ){ bullet = this.myBullets[i]; if(bullet.y < -bullet.height){ this.removeChild(bullet);
                    Bullet.reclaim(bullet); this.myBullets.splice(i,1); i--; myBulletsCount--;
                } bullet.y -= 12 * speedOffset;
                  
            } //敌人飞机运动  var theFighter:fighter.Airplane; var enemyFighterCount:number = this.enemyFighters.length; for(i = 0;i < enemyFighterCount;i  ){ theFighter = this.enemyFighters[i]; if(theFighter.y>this.stage.stageHeight){ this.removeChild(theFighter);
                    Airplane.reclaim(theFighter); theFighter.removeEventListener("createBullet",this.createBulletHandler,this); theFighter.stopFire(); this.enemyFighters.splice(i,1); i--; enemyFighterCount--;
                } theFighter.y  = 4 * speedOffset;
                
            } //敌人子弹运动  var enemyBulletsCount:number = this.enemyBullets.length; for(i = 0;i < enemyBulletsCount;i  ){ bullet = this.enemyBullets[i]; if(bullet.y>this.stage.stageHeight){ this.removeChild(bullet);
                    Bullet.reclaim(bullet); this.enemyBullets.splice(i,1); i--; enemyBulletsCount--;//数组长度已经改变  } bullet.y  = 8 * speedOffset;
               
            } this.gameHitTest();
        } /**游戏碰撞检测*/  private gameHitTest():void { var i:number,j:number; var bullet:fighter.Bullet; var theFighter:fighter.Airplane; var myBulletsCount:number = this.myBullets.length; var enemyFighterCount:number = this.enemyFighters.length; var enemyBulletsCount:number = this.enemyBullets.length; //将需消失的子弹和飞机记录  var delBullets:fighter.Bullet[] = []; var delFighters:fighter.Airplane[] = []; //我的子弹可以消灭敌机  for(i=0;i<myBulletsCount;i  ) { bullet = this.myBullets[i]; for(j=0;j<enemyFighterCount;j  ) { theFighter = this.enemyFighters[j]; if(fighter.GameUtil.hitTest(theFighter,bullet)) { theFighter.blood -= 2; if(delBullets.indexOf(bullet)==-1) delBullets.push(bullet); if(theFighter.blood<=0 && delFighters.indexOf(theFighter)==-1) delFighters.push(theFighter);
                    }
                }
            } //敌人的子弹可以减我血  for(i=0;i<enemyBulletsCount;i  ) { bullet = this.enemyBullets[i]; if(fighter.GameUtil.hitTest(this.myFighter,bullet)) { this.myFighter.blood -= 1; if(delBullets.indexOf(bullet)==-1) delBullets.push(bullet);
                }
            } //敌机的撞击可以消灭我  for(i=0;i<enemyFighterCount;i  ) { theFighter = this.enemyFighters[i]; if(fighter.GameUtil.hitTest(this.myFighter,theFighter)) { this.myFighter.blood -= 10;
                }
            } if(this.myFighter.blood<=0) { this.gameStop();
            } else { while(delBullets.length>0) { bullet = delBullets.pop(); this.removeChild(bullet); if(bullet.textureName=="b1") this.myBullets.splice(this.myBullets.indexOf(bullet),1); else  this.enemyBullets.splice(this.enemyBullets.indexOf(bullet),1);
                    fighter.Bullet.reclaim(bullet);
                } this.myScore  = delFighters.length; while(delFighters.length>0) { theFighter = delFighters.pop(); theFighter.stopFire(); theFighter.removeEventListener("createBullet",this.createBulletHandler,this); this.removeChild(theFighter); this.enemyFighters.splice(this.enemyFighters.indexOf(theFighter),1);
                    fighter.Airplane.reclaim(theFighter);
                }
            }
        } /**游戏结束*/  private gameStop():void{ this.addChild(this.btnStart); this.bg.pause(); this.removeEventListener(egret.Event.ENTER_FRAME,this.gameViewUpdate,this); this.removeEventListener(egret.TouchEvent.TOUCH_MOVE,this.touchHandler,this); this.myFighter.stopFire(); this.myFighter.removeEventListener("createBullet",this.createBulletHandler,this); this.enemyFightersTimer.removeEventListener(egret.TimerEvent.TIMER,this.createEnemyFighter,this); this.enemyFightersTimer.stop(); //清理子弹  var i:number = 0; var bullet:fighter.Bullet; while(this.myBullets.length>0) { bullet = this.myBullets.pop(); this.removeChild(bullet);
                fighter.Bullet.reclaim(bullet);
            } while(this.enemyBullets.length>0) { bullet = this.enemyBullets.pop(); this.removeChild(bullet);
                fighter.Bullet.reclaim(bullet);
            } //清理飞机  var theFighter:fighter.Airplane; while(this.enemyFighters.length>0) { theFighter = this.enemyFighters.pop(); theFighter.stopFire(); theFighter.removeEventListener("createBullet",this.createBulletHandler,this); this.removeChild(theFighter);
                fighter.Airplane.reclaim(theFighter);
            } //显示成绩  this.scorePanel.showScore(this.myScore); this.scorePanel.x = (this.stageW-this.scorePanel.width)/2; this.scorePanel.y = 100; this.addChild(this.scorePanel);
        }
    }
}

标签: 飞机大战 Egret

实例下载地址

egret飞机大战源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警