Egret学习笔记 (Egret打飞机-9.子弹对敌机和主角的碰撞)
运行起来,虽然主角飞机和敌机都在互相发射子弹,但是子弹打中了就和没打中效果是一样的。。
这一章我们就来处理子弹和飞机的碰撞问题。
我们所有的操作都是基于Main这个容器来做的。所以我就把这个处理放到Main里面,监听Main的ENTER_FRAME事件
this.addEventListener(egret.Event.ENTER_FRAME, (e) => {
//判断子弹是否和飞机碰撞
let isHit = this._bullets.IsHit(this._Hero)
// console.log("Hit:" + isHit)
//判断Enemy是否和主角碰撞
}, this)
这里面就两个操作,一个是判断主角子弹是否击中敌机,敌机子弹是否击中主角,因为是判断子弹是否打中飞机,那么我们就在子弹的工厂类BulletFactory.ts里面做这个检测操作
public IsHit(e: egret.DisplayObjectContainer): boolean {
let arr = EnemyFactory.Init().GetIsUsePlane(); //1.从敌机对象池中取出已经在使用的飞机
let isHit = false;
let hitevent = new HitEvent(HitEvent.EventString);
for (var i = ; i < this._bullet.length; i++) {
if (this._bullet[i].IsUse == true) { //2.循环遍历子弹对象池,使用IsUse状态为true的子弹
if (this._bullet[i].btype == IdentityType.ENEMY) { //3.判断子弹类型,如果是敌机发射的,那么就和主角进行碰撞检测
isHit = GameUtils.hitTest(e, this._bullet[i])
hitevent.htype = HitType.ENEMY_TO_HERO;
}
if (this._bullet[i].btype == IdentityType.HERO) { //4.如果是主角发射的。那么就和第一步的取出来的数组进行碰撞检测
for (var j = ; j < arr.length; j++) {
if (arr[j].IsUse) {
isHit = GameUtils.hitTest(arr[j], this._bullet[i])
hitevent.enemy = arr[j];
hitevent.htype = HitType.HERO_TO_ENEMY;
}
}
}
if (isHit) { //如果碰撞检测为true,那么触发HitEvent事件,并传递检测结果,并手动调用子弹的回收方法
this.dispatchEvent(hitevent);
this._bullet[i].Recycle();
}
}
}
return isHit;
}
从敌机对象池中取出已经使用的敌机对象
public GetIsUsePlane(): EnemyPlane[] {
let planes = [];
for (var i = ; i < this._enemys.length; i++) {
if (!this._enemys[i].IsUse) {
planes.push(this._enemys[i])
}
}
return planes;
}
然后监听HitEvent来对击中的事件做操作。
判断事件类型,知道是谁被击中了,然后对应做出不同的处理,如果主角被击中,那么可以做扣除HP值等操作,敌机被击中,可以做主角加分,把敌机抹除掉等操作
this._bullets.addEventListener(HitEvent.EventString, (e: HitEvent) => {
console.log("子弹碰撞事件触发:" + e.htype)
if (e.htype == HitType.ENEMY_TO_HERO) {
//Hero被击中
}
if (e.htype == HitType.HERO_TO_ENEMY) {
//Enemy被击中
e.enemy.Recycle();
this._Score += ;
console.log("当前分数:" + this._Score);
}
}, this)
然后运行,就可以看到子弹击中飞机,会被回收,然后触发HitEvent事件。
Egret学习笔记 (Egret打飞机-9.子弹对敌机和主角的碰撞)的更多相关文章
- Egret学习笔记 (Egret打飞机-5.实现子弹对象)
上一章把飞机添加到屏幕上,但是飞机要发射子弹对吧?那么这一章我们就来实现一下发射子弹,并实现一个简单的子弹对象池 先来捋一捋思路 1.创建一个子弹对象 2.然后添加一个bitmap,显示子弹贴图 3. ...
- Egret学习笔记 (Egret打飞机-8.敌机和主角飞机发射子弹)
经过前面几章的准备,我们差不多已经具备了一个基本的框架,这一章我们就开始添砖加瓦了. 敌机定时发射一个子弹,子弹的方向是从上到下,但是发射子弹的代码应该放在哪儿呢? 从面向对象编程的思想来说,子弹是敌 ...
- Egret学习笔记 (Egret打飞机-7.实现敌机工厂)
在游戏过程之,敌机是源源不断的冲屏幕上方往下飞,如果我们每一架敌机都直接new的话,在飞机很多的情况下,也许有性能问题. 就像前面子弹对象池一样,我们也要实现一个飞机对象池,也就是标题说的敌机工厂(之 ...
- Egret学习笔记 (Egret打飞机-6.实现敌机飞起来)
有了子弹,总得有敌人来打吧,不然游戏有啥意思呢?今天我们来实现敌机从屏幕上边往下飞 参考微信打飞机游戏里面,敌机分为3种 1是特小飞机,2是小飞机,还有一种就是大飞机 面向对象编程提倡抽象,实现代码复 ...
- Egret学习笔记 (Egret打飞机-1.大致思路)
大致看了一遍Egret的官方文档,就开始打算使用Egret来开发一个打飞机游戏. 首先来捋一捋思路,先来看一看一个打飞机游戏的图片 基本上一个打飞机游戏分为 开始游戏 ----------进入游戏 ...
- Egret学习笔记 (Egret打飞机-4.添加主角飞机和实现飞行效果)
今天继续写点击了开始之后,添加一个飞机到场景中,然后这个飞机的尾巴还在冒火的那种感觉 先拆解一下步骤 1.首先完成飞机容器的图片加载 2.然后把容器添加到场景中 3.然后实现动画 -首先,我们新建一个 ...
- Egret学习笔记 (Egret打飞机-3.实现背景循环滚动)
游戏背景里面的猪脚飞机看起来是一直在向前飞,但是实际上只是一个视觉差而已. 猪脚是出于不动的状态,背景从上到下滚动,然后让玩家觉得飞机在不停的往前飞.(当然这只是其中一种实现思路) 差不多就是这样,然 ...
- Egret学习笔记 (Egret打飞机-2.开始游戏)
打开 Egret Wing,新建一个Egret游戏项目,然后删掉默认生成的createGameScene方法里面的东西 然后新建一个BeginScene.ts的文件,作为我们的游戏的第一个场景 cla ...
- Egret学习笔记.1 (写在前面的废话)
我记得之前谁说过,大部分程序员入行,都是因为小的时候的游戏机啊,各种电子设备啊....觉得有意思,才入的行 . 至少我本人是因为之前上高中那会儿,喜欢玩手机.那会儿还是MTK,塞班的时代,喜欢拿着手机 ...
随机推荐
- FORTH基础
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- 《JavaScript权威指南》读书笔记——JavaScript核心
前言 这本由David Flanagan著作,并由淘宝前端团队译的<JavaScript权威指南>,也就是我们俗称的“犀牛书”,算是JS界公认的“圣经”了.本书较厚(有1004页),读起来 ...
- Azure Powershell对ASM资源的基本操作
本文主要介绍Windows Azure Powershell对ASM资源的基本操作 1.登陆ASM模式,命令:Add-AzureAccount -Environment AzureChinaCloud ...
- 反应堆模式(reactor)
在提到高性能服务器编程的时候肯定有听过reactor模式,如果只是简单的写一个服务器和客户端建立连接的程序来熟悉一下使用socket函数编程,一般这种情况都是同步方式实现的,服务器阻塞等待客户端的连接 ...
- java.lang.Thread
package java.lang; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; import java. ...
- SQL Server错误严重性级别和异常处理
关于SQL Server的错误严重性级别的说明,强烈认真看一下下面的两个链接 脱机帮助 ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/sqlerrm9/html/ ...
- [Nginx]单机环境的多应用配置
# 服务层 # https://github.com/farwish/alconservice # alconservice.conf server { listen 8090; root /home ...
- [svn] TortoiseSVN 图文操作
TortoiseSVN 图文操作 [参考]https://jingyan.baidu.com/article/6c67b1d6f524d52787bb1ef3.html
- 树莓派小车By 树莓派爱好者ITJoker(通过C socket通信实现树莓派视频小车)(二)
前面的方法可以参照(一)来配置GPIO口. 下面是代码...仅供参考,转载请注明出处. 1. 先输入以下指令,再复制代码,Ctrl+X 输入Y 回车 保存. sudo nano start.c ...
- hive权威指南<一>
一.ETL介绍: 数据抽取:把不同的数据源数据抓取过来,存到某个地方 数据清洗:过滤那些不符合要求的数据或者修正数据之后再进行抽取 不完整的数据:比如数据里一些应该有的信息缺失,需要补全后再写入数据仓 ...