当前位置:网站首页>Cocoscreator+typescripts write an object pool by themselves
Cocoscreator+typescripts write an object pool by themselves
2022-07-06 22:43:00 【Casimodo said】
Why object pools are needed ?
Create nodes at runtime (
cc.instantiate
) And destroy (node.destroy
) Operations are very performance intensive , So we are in a more complex scene , Usually only in the scenario initialization logic (onLoad
) Nodes will be created in , Nodes are destroyed only when the scene is switched . If you make an action game with a large number of enemies or bullets that need to be generated and destroyed repeatedly , How can we create and destroy nodes at any time during the game ?
Many people will go to the official documents to check , Is there any way to solve ? Links to official documents about object pools :
Use object pool · Cocos Creatorhttps://docs.cocos.com/creator/2.3/manual/zh/scripting/pooling.html?q= So this time, I'd like to introduce my object pool :PoolMgr.ts
Define an object , Put the initialized object inside :
public static _dictPool: Object = {}
initialization hui Object pool :
/**
* Initialize object pool
* @param count The amount generated
* @param prefab The prefabricated body that generates the node
*/
public static initPool(count:number,prefab:cc.Prefab){
for (let index = 0; index < count; index++) {
let node:cc.Node = cc.instantiate(prefab);
this.setNode(node);
}
}
This is self written initialization , Generally, the object is initialized in the loading interface , You can call directly in the game .
Get an object in the object pool :
/**
* Access to the node
* @param prefab The prefabricated body that generates the node
* @param parent The parent of the node
* @returns Generate or nodes in the object pool
*/
public static getNode(prefab:cc.Prefab,parent:cc.Node){
let name = prefab.name;
let node:cc.Node = null;
if(this._dictPool[name]){
let pool = this._dictPool[name];
if (pool && pool.size() > 0) {
node = pool.get();
} else {
node = cc.instantiate(prefab);
}
}
else{
let pool = new cc.NodePool();
this._dictPool[name] = pool;
node = cc.instantiate(prefab);
}
node.parent = parent;
return node;
}
Recycle an object :
/**
* Recycle node
* @param node Recycled nodes
*/
public static setNode(node:cc.Node){
const name = node.name;
let pool = null;
if(this._dictPool[name]){
pool = this._dictPool[name];
}
else{
pool = new cc.NodePool();
this._dictPool[name] = pool;
}
if(pool.size() > 100){
node.destroy();
return;
}
pool.put(node);
}
Examples of use :
let count:number = 10;
let path:string = "xx";
sc.load.LoadPrefab(path,(prefab:cc.Prefab)=>{
PoolMgr.initPool(count,prefab);
});
Call the initialization interface when loading resources , This initializes 10 Preform corresponding to the path ;
Set up :
let node = PoolMgr.getNode(prefab,parent);
Obtain preform , Set parent node , You can get this node ;
Recycling :
PoolMgr.setNode(node);
Pay attention when recycling nodes : If you make any changes to this node , For example, its rotation 、 Zoom, etc , Note its properties when used again .
边栏推荐
- uniapp设置背景图效果demo(整理)
- 变量与“零值”的比较
- Gd32f4xx serial port receive interrupt and idle interrupt configuration
- Return keyword
- 2022-07-04 the high-performance database engine stonedb of MySQL is compiled and run in centos7.9
- 云原生技术--- 容器知识点
- The ceiling of MySQL tutorial. Collect it and take your time
- 2014阿里巴巴web前实习生项目分析(1)
- memcached
- 项目复盘模板
猜你喜欢
Unified Focal loss: Generalising Dice and cross entropy-based losses to handle class imbalanced medi
树的先序中序后序遍历
MySQL ---- first acquaintance with MySQL
欧洲生物信息研究所2021亮点报告发布:采用AlphaFold已预测出近1百万个蛋白质
新手程序员该不该背代码?
Heavyweight news | softing fg-200 has obtained China 3C explosion-proof certification to provide safety assurance for customers' on-site testing
On the problems of born charge and non analytical correction in phonon and heat transport calculations
signed、unsigned关键字
AdaViT——自适应选择计算结构的动态网络
如何用程序确认当前系统的存储模式?
随机推荐
金融人士必读书籍系列之六:权益投资(基于cfa考试内容大纲和框架)
软考高级(信息系统项目管理师)高频考点:项目质量管理
Aardio - 利用customPlus库+plus构造一个多按钮组件
UDP programming
LeetCode 练习——剑指 Offer 26. 树的子结构
POJ 1094 sorting it all out
Adavit -- dynamic network with adaptive selection of computing structure
Rust knowledge mind map XMIND
欧洲生物信息研究所2021亮点报告发布:采用AlphaFold已预测出近1百万个蛋白质
How big is the empty structure?
Is there any requirement for the value after the case keyword?
extern关键字
signed、unsigned关键字
第十九章 使用工作队列管理器(二)
自定义 swap 函数
(18) LCD1602 experiment
TypeScript获取函数参数类型
OpenNMS分离数据库
云原生技术--- 容器知识点
机试刷题1