当前位置:网站首页>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 Creator
https://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 .
边栏推荐
- MySQL authentication bypass vulnerability (cve-2012-2122)
- 2014 Alibaba web pre intern project analysis (1)
- MySQL----初识MySQL
- 剪映+json解析将视频中的声音转换成文本
- Web APIs DOM time object
- POJ 1258 Agri-Net
- Slide the uniapp to a certain height and fix an element to the top effect demo (organize)
- Web APIs DOM 时间对象
- Leetcode exercise - Sword finger offer 26 Substructure of tree
- [IELTS speaking] Anna's oral learning record part1
猜你喜欢

(18) LCD1602 experiment

Signed and unsigned keywords

Daily question 1: force deduction: 225: realize stack with queue

Build op-tee development environment based on qemuv8

Web APIs DOM 时间对象

LeetCode 练习——剑指 Offer 26. 树的子结构

【编译原理】做了一半的LR(0)分析器

欧洲生物信息研究所2021亮点报告发布:采用AlphaFold已预测出近1百万个蛋白质

Aardio - 通过变量名将变量值整合到一串文本中

Unified Focal loss: Generalising Dice and cross entropy-based losses to handle class imbalanced medi
随机推荐
2022-07-04 the high-performance database engine stonedb of MySQL is compiled and run in centos7.9
UDP编程
【无标题】
金融人士必读书籍系列之六:权益投资(基于cfa考试内容大纲和框架)
extern关键字
Aardio - construct a multi button component with customplus library +plus
case 关键字后面的值有什么要求吗?
UDP programming
pytorch_YOLOX剪枝【附代码】
Volatile keyword
MySQL约束的分类、作用及用法
Some suggestions for foreign lead2022 in the second half of the year
Return keyword
云原生技术--- 容器知识点
UVa 11732 – strcmp() Anyone?
2014 Alibaba web pre intern project analysis (1)
Aardio - 通过变量名将变量值整合到一串文本中
LeetCode 练习——剑指 Offer 26. 树的子结构
General implementation and encapsulation of go diversified timing tasks
Adavit -- dynamic network with adaptive selection of computing structure