1. 疑似内存泄露问题


 以前最场景切换时候,根本不会管上个场景内存问题,因为游戏都很小,所有素材全部缓存到内存中,
 内存都不会占用多少

 这个项目,最好之后 没切换一次场景,内存都会暴涨,最初怀疑内存泄露,后来发现不是,而是sprite被remove后,
 虽然内存被清理掉了,但是对应的texture 没有被清除掉,还在textture 里面, 所以清掉就可以了

项目初期在切场景时没注意内存管理,结果每切一次场景内存都会暴涨。最初怀疑是内存泄露,排查后发现并非如此:sprite 被 remove 之后内存虽然被释放,但对应的 texture 并没有从缓存中清除,依旧留在 texture cache 里。把这部分 texture 主动清理掉,问题就解决了。

2. SpriteFrameCache 和 TextureCache 的区别

SpriteFrameCache 用于加载 plist 文件并缓存精灵帧,TextureCache 则是 Sprite 直接使用的纹理缓存。两者定位不同,具体差异还需要再翻一翻源码确认。

3. C++ 多态还不够熟练,基础不牢

这个项目里几乎每个类都用了大量 virtual,UI 父类负责通用的游戏逻辑,子类则负责各自的差异化实现。写下来之后发现自己对多态的运用还不够熟练,基础仍然偏薄弱。

4. 项目中的缺陷

性能优化做得不够,设计模式的积累还差得远,代码重复比较多,模块之间的耦合度也偏大。

5. 最大的不足

最核心的问题是对 cocos2dx 源码理解得不够深入,很多底层原理还不清楚,导致开发过程中不够得心应手。前面第 1 点提到的"疑似内存泄露问题"就是一个典型例子——如果对引擎内部的缓存机制足够熟悉,根本不需要绕这么一大圈才定位到真正的原因。