2010-07-23 71 views
0

我在一个屏幕截图准备将覆盖到的cocos2d层...cocos2d的问题 - 层没有更新速度不够快,

CGSize winSize = [[CCDirector sharedDirector] winSize]; 

CCScene* currentScene = [[CCDirector sharedDirector] runningScene]; 

GameLayer* topLayer = (GameLayer *)[currentScene.children objectAtIndex:0]; 

CCSprite *middleBackground = [CCSprite spriteWithFile:@"mid_bg.png"]; 
middleBackground.position = ccp(winSize.width * 0.5,winSize.height * 0.55); 
[topLayer addChild:middleBackground z:3 tag:111]; 

CCSprite *bottomBackground = [CCSprite spriteWithFile:@"bot_bg.png"]; 
bottomBackground.position = ccp(winSize.width * 0.5,winSize.height * 0.1); 
[topLayer addChild:bottomBackground z:3 tag:112]; 

CCSprite *topBackground = [CCSprite spriteWithFile:@"top_bg.png"]; 
topBackground.position = ccp(winSize.width * 0.5,winSize.height * 0.94); 
[topLayer addChild:topBackground z:3 tag:113]; 

[[UIApplication sharedApplication] setStatusBarHidden:YES]; 

CCSprite *topBackground2 = [CCSprite spriteWithFile:@"statusCover2.png"]; 
topBackground2.position = ccp(winSize.width * 0.5,winSize.height * 0.992); 
[topLayer addChild:topBackground2 z:3 tag:114]; 

[[topLayer popoverController] dismissPopoverAnimated:YES]; 

然后

[UIImage imageWithCGImage:UIGetScreenImage()]; 

但是后来没有采取覆盖考虑到。它是在添加叠加之前拍摄图层的屏幕截图。

有无论如何我可以告诉cocos2d场景/图层现在更新帧?

回答

0

因为cocos2d是异步的,所以你不能告诉它做类似的事情。但是,您可以安排一个回调在两秒钟内发生,并让该回调执行屏幕截图。

[self schedule: @selector(screenshot:) interval:2.0]; 

然后定义选择这样的:

-(void) screenshot:(id)sender { 
    [UIImage imageWithCGImage:UIGetScreenImage()]; 
    [self unschedule:@selector(screenshot:)]; 
} 

不要忘记取消预定了。

+0

太棒了,每个设备上的间隔时间是否一致? – Carl 2010-07-23 21:30:13

+0

是的,它会一致的,但在现实生活中时间分辨率不是很高(是的,你可以指定一个浮点数,但不要依赖它在iOS上高度精确)。 – 2010-11-04 15:12:18