我在Cocos2d 2.1中创建了这个iPhone应用程序。
当应用首次启动时,它会显示全屏背景和UIACtionSheet,用户必须选择一个选项来启动应用程序。而已。此操作表由委托(HelloWorldLayer场景)运行的第一个场景呈现。
没有其他任何东西被加载。在我负责的任何线程上都没有运行任何东西。即便如此,CPU使用率约为20%。我在仪器上描述了这个,这就是我所拥有的:
我看到[CCGLView swapBuffers]里面有一些引起注意的东西, CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION (CoreFoundation)。
如果我选择“仅显示obj-c”,我会看到:
显然有罪的是这个drawScene,但是带有背景图像和UIActionsheet的场景如何使用那么多CPU?
如何追踪此问题的根源?
请注意。这正在设备上进行测试。在模拟器上CPU使用率是77%!!!!!
答案 0 :(得分:2)
与任何OpenGL应用程序一样,Cocos2d每帧都会重绘屏幕内容。通常,这意味着每秒60帧。交换帧缓冲区和所有其他相关的开销需要一些CPU时间。
所以你所观察到的是正常行为,没有什么可以做的。在渲染引擎中没有“空闲”的概念,它假设屏幕内容通常会发生变化,即使它们没有改变(或屏幕为空)也会绘制屏幕内容。
但是pause
CCDirector
可以降低帧率,节省CPU周期和电量。或致电stopAnimation
以完全停止所有更新,包括预定选择器。然而,帧缓冲区发生的事情是未定义的,通常会粘在一起(即最后渲染的帧“冻结”),但对于所有情况和设备可能都不是这样。
就模拟器而言:忽略它。它的性能特征并不具有可比性和指导性。