当前位置: 首页 > news >正文

cocos2d 缓存池 对象的再利用

1.简单的叙述说明池


例如,我们知道,游戏的游戏类型跑酷,游戏元素都在不断重复。游戏的内容将继续从屏幕右侧的创建,当元件在屏幕的左侧的,将消失。假设不变new 对象。release 对象 性能影响。怎样优化呢?就涉及到缓存池的概念。


再举一个样例:一个主角在一个竞技场中不断杀怪。每次有5个怪出现,杀死一个又会出来一个。

每次出怪就new 怪,死亡怪就release怪。会非常浪费的。

已经死亡的怪,我们简单地给他补满血不就能够反复使用了嘛!像拍电影,一个人不是真正死亡,仅仅是看起来死了。还是能够反复使用的嘛!


2.缓存池简单实现


我们能够事先new10个怪放入到一个数组中。简单把这个数组称作缓存池,事实上就是一个数组。

再搞个int的变量表示取数组中第几个怪,初始化为0,表示取第一个怪。

1.当我们想要从屏幕中创建一个新怪时,不去new,而是用那个int变量从数组中取一个怪拿来用。当然拿来用之后,还要简单的初始化下,给他补满血啊。穿上完整衣服等等。再把int变量加1,假设int变量等于数组的长度时。把它归0。

2.当一个怪被主角杀死时,让这怪播完死亡动画后,就remove掉,但不把他全然release掉。

差点儿相同实现就是这样,简单吧!

仅仅是注意初始缓存池。new对象的数量。一般要大于你实际使用的数量。


3.简单代码


//创建缓存池
Vector bonePools;
void createBonePools(){
    
    if(bonePools.empty()){
        for(int i = 0; i < 30; ++i){
            auto oneBone = Bone::create();
            bonePools.pushBack(oneBone);
        }
    }
}

//从缓存池中取一个对象
int _boneIndex;
Bone* getOneBone(){
    if(_boneIndex == bonePools.size()){
        _boneIndex = 0;
    }
    Bone* result = bonePools.at(_boneIndex);
     result->reuseInit();//这个比較重要,反复使用一个元素也要简单初始化一些东西的。之前死亡的人物记得给他补满血
    ++_boneIndex;
    return result;
}


cocos2d 缓存池 对象的再利用

版权声明:本文博客原创文章,博客,未经同意,不得转载。

相关文章:

  • 部署DNS服务
  • Skype for Business Server 2015-13-IISARR-2-发布-1-OWA-ECP
  • AFNetworking 使用总结 (用法+JSON解析)
  • 【Nginx】磁盘文件写入飞地发
  • Mvc基础(1)
  • CSharp获取图形文件的读写
  • leetcode 137 Single Number II
  • Office 365系列之十四:配置自定义URL访问个人Portal和网页版Outlook
  • Linux汇编与C互相调用
  • 问题-[Delphi]SendMessageTimeout调用后卡住点击任务栏还会出现窗体处理
  • 微信公众平台开发前言
  • selinux故障解决方法及简介
  • 基于 Web 的 Go 语言 IDE - Wide 1.3.0 发布!
  • 软件包管理器之一——RPM介绍及应用
  • e.target 和 e.srcElement 的使用问题
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 【Leetcode】104. 二叉树的最大深度
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • gops —— Go 程序诊断分析工具
  • iOS编译提示和导航提示
  • Java 多线程编程之:notify 和 wait 用法
  • javascript面向对象之创建对象
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • mockjs让前端开发独立于后端
  • underscore源码剖析之整体架构
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 多线程 start 和 run 方法到底有什么区别?
  • 翻译--Thinking in React
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 前端临床手札——文件上传
  • 前嗅ForeSpider教程:创建模板
  • 强力优化Rancher k8s中国区的使用体验
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 什么软件可以剪辑音乐?
  • 什么是Javascript函数节流?
  • 小程序 setData 学问多
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • (145)光线追踪距离场柔和阴影
  • (27)4.8 习题课
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (MATLAB)第五章-矩阵运算
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (转)setTimeout 和 setInterval 的区别
  • .gitignore文件使用
  • .mysql secret在哪_MySQL如何使用索引
  • .NET Core 成都线下面基会拉开序幕
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • .NET与 java通用的3DES加密解密方法
  • ::前边啥也没有
  • @Service注解让spring找到你的Service bean
  • [ C++ ] STL_vector -- 迭代器失效问题