[cocos2d-iphone]跳帧

本文探讨了在Cocos2d-iphone中由于长时间执行结束方法导致的游戏画面跳帧问题,并提出通过延时调用截图方法来优化执行时间,避免跳帧现象。

今天写一个小游戏的时候 在触发结束的时候 因为在结束方法里调用了 

截图 导致了 出现跳帧。

 

思考了一下。

cocos2d-iphone是使用时序队列的而不是多线程。

那么就意味着 我这个结束方法(stop)执行的时间越长,就会导致在cocos2d的时序队列的下一个刷新帧执行间隔时间变长。从而出现跳帧。

思路:减少stop方法的执行时间。(但是 截图必须在菜单出来前截图。so 必须由stop来启动截图。)

那么这里解决方法是使用[self performSelector:@selector(shotImage) withObject:nil afterDelay:0.2];

从而减少stop方法的执行时间。

 

 

-(void)stop{

    [self unscheduleAllSelectors];

    for(CCSprite* sp in [self children]){

        if([sp isKindOfClass:[CCSprite class]]){

            [sp stopAllActions];

        }

    }

    if(scroe>[UserDefault highScore]){

        [UserDefault setHighScore:scroe];

        [self performSelector:@selector(shotImage) withObject:nil afterDelay:0.2];

    }else{

        menuRestart.visible=YES;

    }

 

 

 

//    [self performSelector:@selector(resetValue) withObject:nil afterDelay:1];

}

 

-(void)shotImage{

    [CCDirector sharedDirector].nextDeltaTimeZero = YES;

    CGSize winSize = [CCDirector sharedDirector].winSize;

    CCLayerColor* whitePage = [CCLayerColor layerWithColor:ccc4(255, 255, 255, 0) width:winSize.width height:winSize.height];

    whitePage.position = ccp(winSize.width/2, winSize.height/2);

    CCRenderTexture* rtx = [CCRenderTexture renderTextureWithWidth:winSize.width height:winSize.height];

    [rtx begin];

    [whitePage visit];

    [[[CCDirector sharedDirector] runningScene] visit];

    [rtx end];

    UIImage* image=[rtx getUIImage];

    [UserDefault setHighImage:image];

    menuRestart.visible=YES;

 

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值