iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么使用CocosCreator对象池
  • 258
分享到

怎么使用CocosCreator对象池

2023-06-14 12:06:08 258人浏览 独家记忆
摘要

本篇文章给大家分享的是有关怎么使用CocosCreator对象池,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。具体操作第一步:准备好 Prefab把你想要创建的节点事先设置好并

本篇文章给大家分享的是有关怎么使用CocosCreator对象池,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

具体操作

第一步:准备好 Prefab

把你想要创建的节点事先设置好并做成 Prefab 资源,有些朋友可能不会制作预制体?
(只需要将资源管理器里的资源 拉拽到 层级管理器中 然后 将节点在拉拽回 资源管理器)
这样就完成预制体的创建了!

第二步:初始化对象池

在场景加载的初始化脚本中,我们可以将需要数量的节点创建出来,并放进对象池:

properties: {    enemyPrefab: cc.Prefab  // 所需要的预制体},onLoad: function () {    //  创建对象池    this.enemyPool = new cc.nodePool();        let initCount = 5;    for (let i = 0; i < initCount; ++i) {        let enemy = cc.instantiate(this.enemyPrefab); // 创建节点        this.enemyPool.put(enemy); // 通过 put 接口放入对象池    }}

对象池里需要的初始节点数量可以根据游戏的需要来控制,即使我们对初始节点数量的预估不准确也不要紧,后面我们会进行处理。

第三步:从对象池请求对象

接下来在我们的运行时代码中就可以用下面的方式来获得对象池中储存的对象了:

createEnemy: function (parentNode) {    let enemy = null;    if (this.enemyPool.size() > 0) { // 通过 size 接口判断对象池中是否有空闲的对象        // get()获取对象        enemy = this.enemyPool.get();            } else { // 如果没有空闲对象,也就是对象池中备用对象不够时,我们就用 cc.instantiate 重新创建        enemy = cc.instantiate(this.enemyPrefab);    }    enemy.parent = parentNode; // 将生成的敌人加入节点树    enemy.getComponent('Enemy').init(); //接下来就可以调用 enemy 身上的脚本进行初始化}

安全使用对象池的要点就是在 get 获取对象之前,永远都要先用 size 来判断是否有可用的对象,如果没有就使用正常创建节点的方法,虽然会消耗一些运行时性能,但总比游戏崩溃要好!另一个选择是直接调用 get ,如果对象池里没有可用的节点,会返回 null ,在这一步进行判断也可以。

第四步:将对象返回对象池

当我们杀死敌人时,需要将敌人节点退还给对象池,以备之后继续循环利用,我们用这样的方法:

onEnemyKilled: function (enemy) {    // enemy 应该是一个 cc.Node    this.enemyPool.put(enemy); // 和初始化时的方法一样,将节点放进对象池,这个方法会同时调用节点的 removeFromParent}

这样我们就完成了一个完整的循环,主角需要刷多少怪都不成问题了!将节点放入和从对象池取出的操作不会带来额外的内存管理开销,因此只要是可能,应该尽量去利用。

第五步:使用组件来处理回收和复用的事件

使用构造函数创建对象池时,可以指定一个组件类型或名称,作为挂载在节点上用于处理节点回收和复用事件的组件。

在创建对象池时可以用:

 let menuItemPool = new cc.NodePool('MenuItem');  // 指定一个组件类型

这样当使用 menuItemPool.get() 获取节点后,就会调用 MenuItem 里的 reuse方法,完成点击事件的注册。
当使用menuItemPool.put(menuItemNode)回收节点后,会调用 MenuItem 里的 unuse方法,完成点击事件的反注册。

cc.Class({    extends: cc.Component,    onLoad: function () {        this.node.selected = false;        this.node.on(cc.Node.EventType.TOUCH_END, this.onSelect, this.node);    },    // put() 收回对象池时会调用    unuse: function () {        this.node.off(cc.Node.EventType.TOUCH_END, this.onSelect, this.node);    },    // get()获取对象池内对象时会调用    reuse: function () {        this.node.on(cc.Node.EventType.TOUCH_END, this.onSelect, this.node);    }});

另外 cc.NodePool.get() 可以传入任意数量类型的参数,这些参数会被原样传递给 reuse 方法:

// BulletManager.jslet myBulletPool = new cc.NodePool('Bullet'); //创建子弹对象池let newBullet = myBulletPool.get(this); // 传入 manager 的实例,用于之后在子弹脚本中回收子弹// Bullet.jsreuse (bulletManager) {    this.bulletManager = bulletManager; // get 中传入的管理类实例}hit () {    this.bulletManager.put(this.node); // 通过之前传入的管理类实例回收子弹}

第六步:清除对象池

如果对象池中的节点不再被需要,我们可以手动清空对象池,销毁其中缓存的所有节点:

myPool.clear(); // 调用这个方法就可以清空对象池

当对象池实例不再被任何地方引用时,引擎的垃圾回收系统会自动对对象池中的节点进行销毁和回收。但这个过程的时间点不可控,另外如果其中的节点有被其他地方所引用,也可能会导致内存泄露,所以最好在切换场景或其他不再需要对象池的时候手动调用 clear 方法来清空缓存节点。

以上就是怎么使用CocosCreator对象池,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 怎么使用CocosCreator对象池

本文链接: https://www.lsjlt.com/news/270960.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么使用CocosCreator对象池
    本篇文章给大家分享的是有关怎么使用CocosCreator对象池,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。具体操作第一步:准备好 Prefab把你想要创建的节点事先设置好并...
    99+
    2023-06-14
  • 如何使用CocosCreator对象池
    目录前言:具体操作第一步:准备好 Prefab第二步:初始化对象池第三步:从对象池请求对象第四步:将对象返回对象池第五步:使用组件来处理回收和复用的事件第六步:清除对象池前言: 在运...
    99+
    2024-04-02
  • Java中的对象池怎么使用
    本文小编为大家详细介绍“Java中的对象池怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中的对象池怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 什么是对象池对象池,顾名思义就是一定...
    99+
    2023-07-05
  • golang对象池在网络中怎么使用
    在网络编程中,可以使用golang的对象池来管理网络连接对象,以提高资源的复用和性能。 首先,你需要定义一个对象池结构体,用来管理连...
    99+
    2023-10-26
    golang
  • Java GenericObjectPool对象池化技术怎么使用
    这篇文章主要介绍了Java GenericObjectPool对象池化技术怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java GenericObjectPool对象池化技术怎么使...
    99+
    2023-07-05
  • 高效的Python通用对象池化库怎么使用
    本篇内容主要讲解“高效的Python通用对象池化库怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“高效的Python通用对象池化库怎么使用”吧!对象池模式主要适用于以下应用场景:资源受限的...
    99+
    2023-07-06
  • 如何在java中使用对象池
    这篇文章将为大家详细讲解有关如何在java中使用对象池,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、说明(1)创建工厂类:通过继承BaseGenericObjectPool或者实现基础接...
    99+
    2023-06-15
  • Java中对象池怎么实现
    这篇“Java中对象池怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中对象池怎么实现”文章吧。1. 什么是对...
    99+
    2023-07-02
  • Java BasePooledObjectFactory 对象池化技术的使用
    Java GenericObjectPool 对象池化技术--SpringBoot sftp 连接池工具类 一个对象池包含一组已经初始化过且可以使用的对象,而可以在有需求时创建和销毁...
    99+
    2023-05-14
    Java 对象池 Java 对象池BasePooledObjectFactory
  • .NET Core 中对象池 Object Pool的使用
    目录一、什么是对象池二、.NET Core 中的对象池三、本文小结一、什么是对象池 对象池简单来说就是一种为对象提供可复用能力的软件设计思路。我们常说有借有还,再借不难,而对象池就...
    99+
    2024-04-02
  • go对象池化组件bytebufferpool使用详解
    目录1. 针对问题2. 使用方法3. 源码剖析1. 针对问题 在编程开发的过程中,我们经常会有创建同类对象的场景,这样的操作可能会对性能产生影响,一个比较常见的做法是使用对象池,需要...
    99+
    2024-04-02
  • Java BasePooledObjectFactory对象池化技术如何使用
    本篇内容主要讲解“Java BasePooledObjectFactory对象池化技术如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java BasePooledOb...
    99+
    2023-07-05
  • oracle怎么固定对象到共享池
    本篇内容主要讲解“oracle怎么固定对象到共享池”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“oracle怎么固定对象到共享池”吧!  &...
    99+
    2024-04-02
  • 怎么使用Date对象
    本篇内容介绍了“怎么使用Date对象”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Date对象怎么用那?首...
    99+
    2024-04-02
  • localStorage对象怎么使用
    这篇文章主要讲解了“localStorage对象怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“localStorage对象怎么使用”吧! 如前所述...
    99+
    2024-04-02
  • response对象怎么使用
    在Python中,response对象是对HTTP响应的封装。你可以使用以下步骤来使用response对象:1. 导入需要的模块:`...
    99+
    2023-08-18
    response
  • .NET Core中如何实现或使用对象池?
    目录前言池化策略 对象池的使用 指定对象池容量 在 ASP.NET Core 中使用 总结 前言 池这个概念大家都很熟悉,比如我们经常听到数据库连接池和线程池。它是一种基于使用预先分...
    99+
    2024-04-02
  • 详解Java中对象池的介绍与使用
    目录1. 什么是对象池2. 对象池解决什么问题3. 对象池的优缺点3.1 对象池的优点3.2 对象池弊端4. 对象池有什么特征5. 池的大小选择6. 对象池的使用6.1 接入6.2 ...
    99+
    2023-02-21
    Java对象池使用 Java对象池
  • .NET Core中对象池Object Pool的使用方法是什么
    这篇文章主要讲解了“.NET Core中对象池Object Pool的使用方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“.NET Core中对象池Ob...
    99+
    2023-06-25
  • 怎么使用JavaScript的对象
    本篇内容介绍了“怎么使用JavaScript的对象”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作