Egret学习笔记 (Egret打飞机-6.实现敌机飞起来)

简介: Egret学习笔记 (Egret打飞机-6.实现敌机飞起来)

有了子弹,总得有敌人来打吧,不然游戏有啥意思呢?今天我们来实现敌机从屏幕上边往下飞

参考微信打飞机游戏里面,敌机分为3种 1是特小飞机,2是小飞机,还有一种就是大飞机

面向对象编程提倡抽象,实现代码复用的目的。所以我们打算把飞机的相同的点都抽象到飞机基类里面。

新建一个文件EnemyPlane.ts,敌机类,以后我们所有的飞机,都从这个类来扩展

class EnemyPlane extends egret.DisplayObjectContainer {
  _enemy: egret.Bitmap;
  _timer: egret.Timer;
  _speed: number = 2;
  _tyle: EnemyType = EnemyType.SMALL;
  /**
   * 是否使用
   */
  public IsUse: boolean = false;
  _main: Main;
  public constructor(main: Main, type: EnemyType) {
    super();
    this._main = main;
    this._tyle = type;
    this._enemy = new egret.Bitmap();
    this.addChild(this._enemy);
    this.addEventListener(egret.Event.ADDED_TO_STAGE, () => {
    }, this)
  }
  /**
   * 使用
   */
  public Use() {
    this.IsUse = true;
    //判断类型
    this.y = -this.height; //初始化飞机的位置为屏幕外
    this._main.addChildAt(this, 10)
    this.addEventListener(egret.Event.ENTER_FRAME, this.frame, this)
  }
  /**
   * 回收
   */
  public Recycle() {
    console.log("敌机回收-----")
    this.IsUse = false;
    this._main.removeChild(this);
    this.removeEventListener(egret.Event.ENTER_FRAME, this.frame, this)
  }
  frame() {
    console.log("EnemyPlane Frame")
    if (this.IsUse) {
      this.y += this._speed;
      if (this.y >= GameConfig.SceneH) {
        //从父节点中移除
        if (this.parent) {
          this.parent.removeChild(this);
          this.Recycle();
        }
      }
    }
  }
}
/**
 * 敌机类型
 */
enum EnemyType {
  /**
   * 大飞机
   */
  BIG = 1,
  /**
   * 小飞机
   */
  SMALL = 0,
        /**
   * 特别小的飞机
   */
  VERSCHWINDENDSMALL = 2
}

在基类的构造方法中,我们初始化一些基本的对象,入飞机的Bitmap等等

在基类中,目前就三个方法对我们比较重要。Use方法,初始化当前飞机的Y坐标的位置,并监听ENTER_FRAME事件,Recycle方法是还原当前飞机的状态,并移除飞机的ENTER_FRAME事件,frame方法主要是移动飞机位置,并且在飞机飞出屏幕外面的时候,从父容器中移除当前飞机,并调用飞机的Recycle方法回收飞机

基类定义的方法,以后每个飞机都要用到,比如实现小飞机,大飞机,都可以从基类中扩展,复用基类已经实现的方法

基类实现好了,我们开始扩展具体的飞机,本篇随便只会扩展一种,其他的大家有兴趣自己去扩展

新建一个SmallEnemyPlane.ts的文件。

class SmallEnemyPlane extends EnemyPlane {
  public constructor(main: Main) {
    super(main, EnemyType.SMALL);
    this.width = 69;
    this.height = 89;
    this._enemy.texture = RES.getRes("enemy2_png");
    this.addEventListener(egret.Event.ADDED_TO_STAGE, () => {
    }, this)
  }
}

在小飞机类里面,给父类构造方法传递一个自己的飞机类型进去,然后根据图片的宽高,设置自己的宽高。并加载图片。

到这里,飞机的的方法就全部实现完毕了,把这个对象添加到Main里面

var small = new SmallEnemyPlane(this)
small.Use();

飞机就从屏幕的左上角往下飞了。。。。。

有点卡顿是我截图的问题。。。。实际是很流畅的

目录
相关文章
|
人工智能 数据可视化 搜索推荐
Katalist官网体验入口 生成式AI视觉故事板工具
【2月更文挑战第26天】Katalist官网体验入口 生成式AI视觉故事板工具
494 4
Katalist官网体验入口 生成式AI视觉故事板工具
数据结构 | 堆【图解】
数据结构 | 堆【图解】
|
JavaScript 开发工具 数据安全/隐私保护
向npm注册中心发布包(上)
向npm注册中心发布包(上)
|
12月前
|
JavaScript C++
基于QtQuick的QCustomPlot实现
本文介绍了如何在QtQuick中实现基于QCustomPlot的图表绘制,包括效果图展示、C++和QML方面的实现代码、注意事项以及应用场景。作者提供了源码下载链接,方便读者学习和使用QCustomPlot进行QtQuick应用程序中的图表绘制。
340 4
基于QtQuick的QCustomPlot实现
|
6月前
|
存储 安全 程序员
47.9K star!全平台开源笔记神器,隐私安全首选!
Joplin 是一款开源的笔记记录和待办事项应用,拥有 47.9K star,支持 Windows、macOS、Linux、iOS 和 Android 全平台同步。它采用端到端加密,确保数据隐私安全,支持 Markdown 编辑、数学公式、流程图等丰富功能,并可通过插件扩展实现更多定制化需求。Joplin 完美替代商业笔记软件,适用于程序员知识库、个人事务管理及团队协作等多种场景。
259 1
|
XML JSON 前端开发
Bpmn.js 进阶指南之原理分析与模块改造(下)
Bpmn.js 进阶指南之原理分析与模块改造
2127 2
|
数据采集 人工智能 数据可视化
【译文】数据治理与BI治理
【译文】数据治理与BI治理
233 0
【译文】数据治理与BI治理
|
XML 存储 数据库
Android 逆向笔记 —— ARSC 文件格式解析
Android 逆向笔记 —— ARSC 文件格式解析
Android 逆向笔记 —— ARSC 文件格式解析
|
存储 Kubernetes Linux
pod介绍之 容器分类与重启策略
pod介绍之 容器分类与重启策略
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的新生报到系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的新生报到系统附带文章源码部署视频讲解等
86 0