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,塞班的时代,喜欢拿着手机 ...
随机推荐
- DS18B20温度传感器知识点总结
2018-01-1818:20:48 感觉自己最近有点凌乱,一个很简单的问题都能困扰自己很久.以前能很好使用和调试的DS18B20温度传感器,今天愣是搞了很久,妈卖批. 仅仅一个上拉电阻就困扰了我很久 ...
- 智能家居esp8266对接机智云
依然存在稳定性问题 机智云官网--机智云 一个比较详细的教程--esp8266 一开始采用的是esp12f 可是他太不稳定,总是掉线,机智云的固件我也是刷了无数遍,哎太难了. 我比较懒,走过了太多 ...
- Django_上传图片和模版获取图片
需求: 在Django中,上传图片,存入数据库中的文件的路径,而不是图片本身,也就是说,图片等数据静态文件都可以放到第三方服务器上,我想在把图片保存到Django本地项目中,并可以通过Django自带 ...
- scrapy_cookie禁用_延迟下载_自定义爬虫setting
如何设置禁止cookie? 在setting中 添加字段: COOKIE_ENABLED = False # False关闭cookie,True ...
- vs Code 运行一个本地WEB服务器
VS Code作为前端开发工具,值得推荐,用上之后,爱不释手 当我们建立一个全静态的前端项目时,如果需要将整个项目运行起来也非常简单,两步即可: 1.安装npm install -g live-ser ...
- Linux指令--chown
chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名或者组ID:文件是以空格分开的要改变权限的文件列表,支持通配符.系统管理员经常使用chown命令,在将文件拷贝 ...
- 自己模拟的一个简单的tomcat
servlet容器的职责 总的来说,一个全功能的servlet容器会为servlet的每个HTTP请求做下面的一些工作: 1,当第一次调用servlet的时候,加载该servlet类并调用servle ...
- Part 4:表单和类视图--Django从入门到精通系列教程
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...
- 基于 HTML5 WebGL 的 3D SCADA 主站系统
这个例子的初衷是模拟服务器与客户端的通信,我把整个需求简化变成了今天的这个例子.3D 的模拟一般需要鹰眼来辅助的,这样找产品以及整个空间的概括会比较明确,在这个例子中我也加了,这篇文章就算是我对这次项 ...
- shell获取字符串长度
方法1: 使用wc -L命令 wc -L可以获取到当前行的长度,因此对于单独行的字符串可以用这个简单的方法获取,另外wc -l则是获取当前字符串内容的行数. 代码如下: echo "abc& ...