1

我刚刚完成了一个 cocos2d iPad 应用程序的快速原型初稿。我没有修改CCTextureAtlas.m文件。

当我离开时,该应用程序运行良好[director_ setDisplayStats:YES]AppDelegate但如果我删除该行或替换[director_setDisplayStats:NO],它会在CCTextureAtlas.m.

-(void) drawNumberOfQuads: (NSUInteger) n fromIndex: (NSUInteger) start在第 522 行,内容如下:

glDrawElements(GL_TRIANGLES, (GLsizei) n*6, GL_UNSIGNED_SHORT, (GLvoid*) (start*6*sizeof(_indices[0])) );

供参考,[director_ setDisplayStats:YES]位于第 154 行AppDelegate.m

应用原型的完整源代码位于此处:

https://github.com/GameAid/Toddler-Taxonomist

对于那些可能查看代码的人来说,点击开始后,BoardLayer这是协调大部分工作和屏幕上显示内容的主要节点。

对于我的生活,我无法弄清楚我在做什么导致这成为一个问题。起初,我怀疑我对[[CCTextureCache sharedCache] removeUnusedTextures](in 'BoardLayer') 的使用有问题,但现在我认为这并没有什么不同。

这是出现在 Xcode 中的调用堆栈:

在此处输入图像描述

关于如何解决这个问题的任何想法?

4

2 回答 2

2

BoardLayer.m中,我正在使用[self removeAllChildrenWithCleanup:YES],这似乎是导致问题的原因。当我将其更改为 simple[self removeAllChildren]时,一切都按预期工作[director_ setShowStats:NO]

我不确定这种冲突的性质是什么——它似乎处于低 OpenGL 级别——但它已在我的代码中修复。

于 2013-04-22T01:04:06.093 回答
1

好吧,在将清理设置为 NO 之前我会小心(如果你不小心,泄漏会潜伏很多时间)。当(在 ccConfig.h 中)我更改时,我能够在没有 FPS 的情况下运行您的应用程序

#define CC_ENABLE_GL_STATE_CACHE 1

#define CC_ENABLE_GL_STATE_CACHE 0

根据您的上述答案,在 GL 级别似乎存在令人讨厌的耦合。我不认为这种优化(状态缓存)会非常明显(如果有的话)影响您的应用程序类型的感知性能。

ps:漂亮的图形,可能会成为许多 7-77 岁孩子的最爱。

于 2013-04-22T01:11:24.060 回答