经过前面几章的准备,我们差不多已经具备了一个基本的框架,这一章我们就开始添砖加瓦了。

敌机定时发射一个子弹,子弹的方向是从上到下,但是发射子弹的代码应该放在哪儿呢?

从面向对象编程的思想来说,子弹是敌机发射的,我们发射子弹的操作应该放在敌机类里面。也就是EnemyPlane.ts。之所以放在敌机的基类里面,就是想能实现代码复用,加入要实现其他的敌机,也可以复用这段代码

在EnemyPlane.ts的构造方法中,我们加入一个Timer

this._timer = new egret.Timer(1000)
this._timer.addEventListener(egret.TimerEvent.TIMER, this.timerFunc, this)
this._timer.addEventListener(egret.TimerEvent.TIMER_COMPLETE, this.timerCom, this)

每一秒都发射一颗子弹

timerFunc(): void {
this.dispatchEvent(this._enemyOpenFireEvent);
}

发射子弹的时候,触发一个敌机开火的事件。然后再在构造方法中监听这个事件

this._enemyOpenFireEvent = new OpenFireEvent(OpenFireEvent.EventString);
this._enemyOpenFireEvent.Btype = IdentityType.ENEMY;
this.addEventListener(OpenFireEvent.EventString, (e: OpenFireEvent) => {
let bullet = BulletFactory.Init().GetBullet();
if (bullet == undefined) {
console.log("对象池中没有对象EnemyPlane")
return;
}
let bx = this.x + this.width / - ;
let by = this.y + this.height + ;;
bullet.Use(e.Btype, bx, by); }, this)

在事件中,我们从子弹对象池中取出一个子弹,然后使用这个子弹并把子弹类型设置为事件传递过来的类型。如果对Egret的事件机制不熟悉的可以参考http://developer.egret.com/cn/2d/event/principle

因为我们之前在子弹类里面处理过子弹飞出屏幕之后,自动回收。所以这里我们就直接运行,就可以看到敌机发射出子弹了(记得设置子弹的速度大于飞机的速度,不然可能出现飞机比子弹还飞的快的情况

同理,主角飞机和敌机可以做同样的处理。只需要在触发开火事件中,设置不同的事件类型就行了!

this._heroOpenFireEvent.Btype = IdentityType.HERO;

然后主角和敌机都开始互相发射子弹了。。。

Egret学习笔记 (Egret打飞机-8.敌机和主角飞机发射子弹)的更多相关文章

  1. Egret学习笔记 (Egret打飞机-9.子弹对敌机和主角的碰撞)

    运行起来,虽然主角飞机和敌机都在互相发射子弹,但是子弹打中了就和没打中效果是一样的.. 这一章我们就来处理子弹和飞机的碰撞问题. 我们所有的操作都是基于Main这个容器来做的.所以我就把这个处理放到M ...

  2. Egret学习笔记 (Egret打飞机-7.实现敌机工厂)

    在游戏过程之,敌机是源源不断的冲屏幕上方往下飞,如果我们每一架敌机都直接new的话,在飞机很多的情况下,也许有性能问题. 就像前面子弹对象池一样,我们也要实现一个飞机对象池,也就是标题说的敌机工厂(之 ...

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

    有了子弹,总得有敌人来打吧,不然游戏有啥意思呢?今天我们来实现敌机从屏幕上边往下飞 参考微信打飞机游戏里面,敌机分为3种 1是特小飞机,2是小飞机,还有一种就是大飞机 面向对象编程提倡抽象,实现代码复 ...

  4. Egret学习笔记 (Egret打飞机-5.实现子弹对象)

    上一章把飞机添加到屏幕上,但是飞机要发射子弹对吧?那么这一章我们就来实现一下发射子弹,并实现一个简单的子弹对象池 先来捋一捋思路 1.创建一个子弹对象 2.然后添加一个bitmap,显示子弹贴图 3. ...

  5. Egret学习笔记 (Egret打飞机-1.大致思路)

    大致看了一遍Egret的官方文档,就开始打算使用Egret来开发一个打飞机游戏. 首先来捋一捋思路,先来看一看一个打飞机游戏的图片 基本上一个打飞机游戏分为 开始游戏   ----------进入游戏 ...

  6. Egret学习笔记 (Egret打飞机-4.添加主角飞机和实现飞行效果)

    今天继续写点击了开始之后,添加一个飞机到场景中,然后这个飞机的尾巴还在冒火的那种感觉 先拆解一下步骤 1.首先完成飞机容器的图片加载 2.然后把容器添加到场景中 3.然后实现动画 -首先,我们新建一个 ...

  7. Egret学习笔记 (Egret打飞机-3.实现背景循环滚动)

    游戏背景里面的猪脚飞机看起来是一直在向前飞,但是实际上只是一个视觉差而已. 猪脚是出于不动的状态,背景从上到下滚动,然后让玩家觉得飞机在不停的往前飞.(当然这只是其中一种实现思路) 差不多就是这样,然 ...

  8. Egret学习笔记 (Egret打飞机-2.开始游戏)

    打开 Egret Wing,新建一个Egret游戏项目,然后删掉默认生成的createGameScene方法里面的东西 然后新建一个BeginScene.ts的文件,作为我们的游戏的第一个场景 cla ...

  9. Egret学习笔记.1 (写在前面的废话)

    我记得之前谁说过,大部分程序员入行,都是因为小的时候的游戏机啊,各种电子设备啊....觉得有意思,才入的行 . 至少我本人是因为之前上高中那会儿,喜欢玩手机.那会儿还是MTK,塞班的时代,喜欢拿着手机 ...

随机推荐

  1. SpringMvc4.x--@ControllerAdvice注解

    通过@ControllerAdvice.我们可以将对于控制器的全局配置放置在同一个位置,注解了@ControllerAdvice的类的方法可以使用@ExceptionHandler,@InitBind ...

  2. -bash: warning: setlocale: LC_CTYPE: cannot change locale (EN_US.UTF-8): No such file or directory

    出问题原因: 通过 su - 切换用户时候,LANG设置为en或者设置错误,切换角色会出现这个错误 如何解决? echo $LANG # 查看 LANG 参数 sed 's#LANG=en#LANG= ...

  3. Django_xadmin_应用外键搜索功能错误

    问题: 当我在给某一张表加上外键搜索的时候,会出现 TypeError: Related Field got invalid lookup: icontains 问题原因: a 表关联 b表,也就是说 ...

  4. js_2_json

    js如何使用json? json.stringify(需要序列化对象)  // 序列化 josn.parse(已经序列化对象)       // 反序列化

  5. WebSphere--部署Servlet

    在WebSphere应用服务器上部署 Servlet需要四个步骤:编译 Servlet 或 Web 应用程序.将类文件放到 WebSphere应用服务器上.将相关的 HTML.JSP 和 SHTML ...

  6. Java代码编写的一般性指导

    (1) 命名规则:这个最基本,也最重要,请牢记. 1,类名首字母应该大写. 2,字段.方法以及对象(句柄)的首字母应小写. 3,对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字 ...

  7. Struts2.3.34+Hibernate 4.x+Spring4.x 整合二部曲之上部曲

    1 导入jar包 可以复制jar包或maven导入,本文最后会给出github地址 2 导入log4j.properties文件 og4j.appender.stdout=org.apache.log ...

  8. Asp.net mvc 中View 的呈现(二)

    [toc] 上一节介绍了 Asp.net mvc 中除 ViewResult 外的所有的 ActionResult,这一节介绍 ViewResult. ViewResultBase ViewResul ...

  9. img的属性alt 与 title的区别

    当我们给图片加属性的时候,初学时,可能会弄混淆alt与title的区别,那么这两个的区别,我们可以从本意来看—— alt原词是“Alternate”,切换,替换的意思.常用的输入法切换会用到alt键进 ...

  10. 输入url到渲染出页面的过程

    输入地址 浏览器查找域名的 IP 地址 这一步包括 DNS 具体的查找过程,包括:浏览器缓存->系统缓存->路由器缓存... 浏览器向 web 服务器发送一个 HTTP 请求 服务器的永久 ...