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();
飞机就从屏幕的左上角往下飞了。。。。。

有点卡顿是我截图的问题。。。。实际是很流畅的
Egret学习笔记 (Egret打飞机-6.实现敌机飞起来)的更多相关文章
- Egret学习笔记 (Egret打飞机-5.实现子弹对象)
上一章把飞机添加到屏幕上,但是飞机要发射子弹对吧?那么这一章我们就来实现一下发射子弹,并实现一个简单的子弹对象池 先来捋一捋思路 1.创建一个子弹对象 2.然后添加一个bitmap,显示子弹贴图 3. ...
- Egret学习笔记 (Egret打飞机-7.实现敌机工厂)
在游戏过程之,敌机是源源不断的冲屏幕上方往下飞,如果我们每一架敌机都直接new的话,在飞机很多的情况下,也许有性能问题. 就像前面子弹对象池一样,我们也要实现一个飞机对象池,也就是标题说的敌机工厂(之 ...
- Egret学习笔记 (Egret打飞机-4.添加主角飞机和实现飞行效果)
今天继续写点击了开始之后,添加一个飞机到场景中,然后这个飞机的尾巴还在冒火的那种感觉 先拆解一下步骤 1.首先完成飞机容器的图片加载 2.然后把容器添加到场景中 3.然后实现动画 -首先,我们新建一个 ...
- Egret学习笔记 (Egret打飞机-3.实现背景循环滚动)
游戏背景里面的猪脚飞机看起来是一直在向前飞,但是实际上只是一个视觉差而已. 猪脚是出于不动的状态,背景从上到下滚动,然后让玩家觉得飞机在不停的往前飞.(当然这只是其中一种实现思路) 差不多就是这样,然 ...
- Egret学习笔记 (Egret打飞机-1.大致思路)
大致看了一遍Egret的官方文档,就开始打算使用Egret来开发一个打飞机游戏. 首先来捋一捋思路,先来看一看一个打飞机游戏的图片 基本上一个打飞机游戏分为 开始游戏 ----------进入游戏 ...
- Egret学习笔记 (Egret打飞机-2.开始游戏)
打开 Egret Wing,新建一个Egret游戏项目,然后删掉默认生成的createGameScene方法里面的东西 然后新建一个BeginScene.ts的文件,作为我们的游戏的第一个场景 cla ...
- Egret学习笔记 (Egret打飞机-9.子弹对敌机和主角的碰撞)
运行起来,虽然主角飞机和敌机都在互相发射子弹,但是子弹打中了就和没打中效果是一样的.. 这一章我们就来处理子弹和飞机的碰撞问题. 我们所有的操作都是基于Main这个容器来做的.所以我就把这个处理放到M ...
- Egret学习笔记 (Egret打飞机-8.敌机和主角飞机发射子弹)
经过前面几章的准备,我们差不多已经具备了一个基本的框架,这一章我们就开始添砖加瓦了. 敌机定时发射一个子弹,子弹的方向是从上到下,但是发射子弹的代码应该放在哪儿呢? 从面向对象编程的思想来说,子弹是敌 ...
- Egret学习笔记.1 (写在前面的废话)
我记得之前谁说过,大部分程序员入行,都是因为小的时候的游戏机啊,各种电子设备啊....觉得有意思,才入的行 . 至少我本人是因为之前上高中那会儿,喜欢玩手机.那会儿还是MTK,塞班的时代,喜欢拿着手机 ...
随机推荐
- 输入和输出--IO流
JavaIO流 首先要理解这个"流"(stream)字:Java把不同的输入,输出源抽象成为流,通过流的方式允许Java程序使用相同的方式来访问不同的输入,输出源.把这里的&quo ...
- Mysql之左连接右连接内连接——示例 (转)
下面是两张表 表stu 表tech 1.右连接 当使用右连接语句查询时,返回结果如下: 1 SELECT stu.id,stu.name,stu.classe_name,tech.id,tech.na ...
- Java中的null值总结
自我总结,有什么不对或不到位的地方,请指出,感激不尽! 目的:熟练掌握java中null值出现的情况,避免NullPointerException 代码环境准备:需要引入junit;将代码packag ...
- Java NIO之网络编程
最近在研究Java NIO和netty,曾经一度感觉很吃力,根本原因还是对操作系统.TCP/IP.socket编程的理解不到位. 不禁感叹,还是当初逃的课太多. 假如上天给我一次机会,能够再回到意气风 ...
- FluorineFx.IO.AMFMessage
近日玩网页游戏七雄争霸,觉得还可以,但是玩起来太累,所以想自己开发个辅助试试 从网上找到了个<流年网页游戏辅助VIP系列教程>,看了下,遇到了一个问题 特来请高手指点...... 代码如下 ...
- Go语言入门——dep入门
本文出现了大量maven的内容,更适合java程序员阅读,如果你的语言做依赖管理的方案与maven差异很大,可能在有些地方会不理解 从很久之前go语言在依赖解决和管理方面方案的匮乏就被不少人诟病.光指 ...
- OS模块的常用内置方法
chdir 修改当前工作目录到指定目录 Change the current working directory to the specified path. chmod 修改一个文件的访问权限 Ch ...
- c# 实现mysql事务
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 安装与配置cacti 0.8.8b
cacti安装与配置 一.安装所需要的软件 Apache 安装Apache文档 Mysql 安装Mysql文档 Php 安装PHP文档 Rrdtool 安装rrdto ...
- ABP官方文档翻译 9.2 Entity Framework Core
Entity Framework Core 介绍 DbContext 配置 在Startup类中 在模块PreInitialize方法中 仓储 默认仓储 自定义仓储 应用程序特定基础仓储类 自定义仓储 ...