第一种: 用CADisplayLink可以实现不停重绘。
例子:
CADisplayLink* gameTimer; gameTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateDisplay:)]; [gameTimer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 第二种: int CCApplication::run() { if (applicationDidFinishLaunching()) { [[CCDirectorCaller sharedDirectorCaller] startMainLoop];//主循环开始 } return 0; } 继续跟进startMainLoop函数
-(void) startMainLoop { // CCDirector::setAnimationInterval() is called, we should invalidate it first [displayLink invalidate]; displayLink = nil; // displayLink是CADisplayLink对象,target是自己,回调是coCaller displayLink = [NSClassFromString(@"CADisplayLink") displayLinkWithTarget:self selector:@selector(doCaller:)];//看这个doCaller回调 [displayLink setFrameInterval: self.interval];//设置帧率 [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];//添加到循环并启动 } 看doCaller回调,
void CCDisplayLinkDirector::mainLoop(void) { if (m_bPurgeDirecotorInNextLoop) { m_bPurgeDirecotorInNextLoop = false; purgeDirector(); } else if (! m_bInvalid) { drawScene();// draw the scene // release the objects CCPoolManager::sharedPoolManager()->pop(); } }好,一个循环完了。最后看到CCPoolManager::sharedPoolManager()->pop();就是用来释放对象的。 第三种:
|
|