- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在 cocos2dx v2.2.3 中开发游戏。我做了一个测试,我发现了一些问题如下:
问题::(在 Windows 中)当我运行我的游戏并检查任务管理器时,我发现我的游戏占用了大约 20MB 内存(平均)。
但是在我的游戏 Layer
的 Init()
中添加这些代码行之后,内存使用量增加了 300MB。
CCSprite *t;
t = CCSprite::create("Character/foo1.png"); //Each picture is about 50MB
t->release();
t = CCSprite::create("Character/foo2.png");
t->release();
t = CCSprite::create("Character/foo3.png");
t->release();
t = CCSprite::create("Character/foo4.png");
t->release();
(我自己为这个测试创建了这些巨大的图片)
我还在 t->release();
调用时检查了 m_uReference。那里 m_uReference
变成了 0
所以它应该被删除!但为什么内存使用率那么高?
问题:我想知道我应该如何在一段时间后删除/删除/释放一个CCSprite?
附加信息/测试:
我找到了一些可能有用的东西。在调用 t->release();
后它到达某处:
CCSprite::~CCSprite(void) {
CC_SAFE_RELEASE(m_pobTexture);
}
但在 CC_SAFE_RELEASE(m_pobTexture);
中,纹理的 m_uReference
从 2 减少到 1,因此纹理不会被删除。我做了一个测试并做了这个改变:
CCSprite::~CCSprite(void) {
CC_SAFE_RELEASE(m_pobTexture);
CC_SAFE_RELEASE(m_pobTexture);
}
RAM 恢复到约 20MB。 (我也知道这不是正确的方法,我还遗漏了其他东西)
最佳答案
首先,您的代码可能会在某个地方崩溃(除非您遗漏了一些代码):CCSprite::create
返回一个自动释放的 CCSprite
,这意味着您不需要 .release()
它(如果你不需要 .retain()
它,它很快就会被删除)。
对于您的问题:CCSprite
需要一个CCTexture
才能工作(您的图像已加载到内存中)。但是 CCSprite
不拥有 CCTexture
; CCTexture
由 CCTextureCache
管理。
CCTextureCache
当没有 CCSprite
使用它时,不要直接释放 CCTexture
:相反,它保留 CCTexture
以供将来使用(因为加载 CCTexture
很昂贵)并且仅在内存不足或您强制它这样做时才释放 CCTexture
,使用
CCTextureCache::sharedTextureCache()->removeUnusedTextures();
简短的回答是:除非您有真正的内存问题(由于内存不足导致游戏崩溃),否则您不必担心内存使用问题。游戏应该使用大量内存。
关于c++ - Cocos2d-x CCSprite内存使用(释放CCSprite),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23313528/
我在将 OALSimpleAudio 导入我的 Cocos 2.X 项目时遇到了很多麻烦。 该应用程序相当大。 我将 Cocos 3.0 导入现有项目的最佳方式是什么? 最终错误如下所示: 这是我到目
Tensorflows object_detection 项目的 labelmaps 包含 90 个类,虽然 COCO 只有 80 个类别。 因此参数num_classes在所有示例配置中设置为 90
我正在使用Cocos2d-x v3.9,并且在iOS模拟器中看到某些行为,该行为仅在执行命令cocos run -p mac时出现。如果我通过XCode构建项目,则不会看到相同的行为。 Cocos和X
我正在使用 Cocos creator 创建一个仅适用于网络浏览器的简单游戏,并且需要实现一个分享到 twiiter 按钮。但我需要用普通的 javascript 来做到这一点。到目前为止,我有这段代
在我的 appDelegate 类中,我有类似这样的代码, while using cocos studio auto glview = director->getOpenGLView();
我有一个渲染循环,我想在后台运行,以便我可以控制播放循环的速度,使其动画缓慢或快速。现在,每次我想使用 Sprite 时,我都会使用 sleep 并在主线程中的 CCRenderTexture 上调用
下面是我的 HelloWorld.h 类: class HelloWorld : public cocos2d::CCLayer { public: HelloWorld(); // Here's a
我想在 cocos 2d 中用手指触摸画线。 -(void) ccTouchesMoved:(NSSet *)inappropriateTouches withEvent:(UIEvent *)eve
我是 cocos creator 和 JavaScript 编程的新手,最近 cocos creator 在其引擎中添加了“集成 Box2D 物理引擎”。我想知道我是否可以使用 ' liquidFun
我能够使用下面的代码和 COCO API 过滤图像,我为我需要的所有类多次执行此代码,这是类别 person 的示例,我这样做了用于 car 等 我现在要做的,是过滤数据集(instances_tra
我一直在检查这个detr repository类别总数为 100,但其中 10 个是空字符串,如图所示 here . 这背后有什么特别的原因吗? 最佳答案 基本上,COCO 数据集在其发布之前已在一篇
对于一个项目,我需要一个可以检测许多不同物体的检测器。为此,COCO 的 90 个类是不够的,因为我希望能够看到更多。 例如,我已经看到 imagenet 有更多的类,但是我找不到训练来检测 imag
在我的一个 iPhone 应用程序中,我需要查明该设备是否有互联网连接。有人帮忙吗? 最佳答案 使用可达性类。 if([self checkInternetConnected] ) {
我想用 Delphi 编写一个简单的编译器用于教育目的。我读过 Coco/R 并发现了 Delphi 的这个实现:http://code.google.com/p/dcocor/ 。据我所知,这是 D
关闭。这个问题需要更多 focused .它目前不接受答案。 想要改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 4 年前。 Improve this q
我正在尝试使用 https://github.com/jsbroks/coco-annotator 用 COCO 关键点注释图像以进行姿势估计。如安装部分所述,我克隆了存储库。我安装了 Docker
我正在使用 Mask-RCNN 并希望训练我自己的几类 coco 风格的数据集。一开始,我只有 2 个类(除了背景)。 虽然 Mask-RCNN 带有样本数据集,但它们要么只包含一个类,要么自己生成数
有谁知道如何更新Cocos 2D-x上的标签文本吗?我在cocos studio上创建了一个标签,现在我尝试通过我的代码访问和更改其内容。 我正在寻找 JavaScript 中的具体代码行,但我只在
我有一个 cocos2d-x 场景和上面的 Button。我尝试添加触摸事件监听器并为其提供回调函数: preloadScene.h: ... public: virtual void Do(Touc
我是cocos2d-js游戏开发的初学者,这两天正在学习。我尝试通过 cocos 命令运行我的项目,但它显示的 cocos 命令不被识别为内部或外部命令。我已按照此链接创建并运行项目 http://c
我是一名优秀的程序员,十分优秀!