联机游戏的前后端交互逻辑(Cocos)【第三章 单机 Entity and ObjectPool 】

实体与对象池是游戏开发中的常见概念。例如,我们可以为子弹设计实体,为玩家设计实体,甚至为爆炸效果设计实体。而对象池就是方便我们管理多个重复实体,而不必频繁创建和销毁的一种设计。

一、Entity实体

这里的实体不是指看得见摸得着的意思。任何经过实例化的对象都可以称为实体。

每一个实体,如果要播放动画效果,我们常常给它加上一个状态机。虽然有些实体(例如爆炸效果),只有一种状态,但是利用模块化的状态机可以很方便的制作动画效果。关于状态机的概念我在上节已经讲过了。

实体简单来说就是对象,但有一定的区别。我们的DataManager.Instance是DataManager类的单例对象,但它不能称为实体。实体可以动态创建,也就是说,可以通过prefab在游戏中动态生成。

上节我们讲了动态创建DynamicCreation。基本思路为,先把我们需要的资源名称存在一个枚举中,然后用一张map来维护资源名称和资源路径的映射关系。然后在游戏初始化的时候通过资源路径来把对应的prefab加载到另一张map中,和资源名称建立另一个映射关系。

那么我们如何管理创建好的实体呢?每一个实体都应该具有自己唯一的编码Id,而且也应该建立一个映射关系,让我们可以通过这个编码id找到实体。

比如我们希望给每一个子弹编码,然后建立一个map来维护所有子弹,可以编写如下代码

//DataManager.ts  
bulletMap: Map<number, BulletManager> = new Map();//建立映射关系,每个子弹都由它对应的BulletManager管理
//DataManager.ts的applyInput方法中的一个分支
case InputTypeEnum.WeaponShoot: {
   const { owner, position, direction } = input;
   const bullet: IBullet = {
       id: this.state.nextBulletId++,
       owner,
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞猪0_0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值