Cocos2D连续滚动基于平铺的游戏:仅在设备中出现奇怪的闪光

时间:2012-09-10 05:00:36

标签: cocos2d-iphone

感谢您的帮助,并阅读本文。

以下是我的来源:Download_Cocos2d_Continuous_Scrolling_Tile_Based_Game

基于cocos2D游戏的连续滚动图块。在这个游戏中,tileMaps根据需要加载和发布 - 第三个瓦片地图是 第一个被释放时加载。重复相同的过程。由于加载时间,在tile滚动中观察到一些混蛋。所以我使用单独的线程来加载tile map。这在屏幕上引起了奇怪的闪光......只在设备中。

  1. 如何修复此闪光灯?
  2. 如何避免平铺滚动中的小混蛋?或任何其他加载方法?
  3. 这是加载代码:

    [NSThread detachNewThreadSelector:@selector(loadTileMapInThread:) toTarget:self withObject:nil];
    
    
    -(void)loadTileMapInThread:(id)argument
    {
        NSAutoreleasePool *autoreleasepool = [[NSAutoreleasePool alloc] init];
        CCGLView *view = (CCGLView*)[[CCDirector sharedDirector] view];
        EAGLContext *auxGLcontext = [[EAGLContext alloc]
                                     initWithAPI:kEAGLRenderingAPIOpenGLES2
                                     sharegroup:[[view context] sharegroup]];
    
        if( [EAGLContext setCurrentContext:auxGLcontext] ) {
    
            [self LoadTilesMap];
    
            glFlush(); //whn I comment this also..flash observed
    
            [EAGLContext setCurrentContext:nil];
        } else {
            CCLOG(@"cocos2d: ERROR: TetureCache: Could not set EAGLContext");
        }
    
        [auxGLcontext release];
    
        [autoreleasepool release];
    }
    

1 个答案:

答案 0 :(得分:3)

通过异步加载tilemap,您只是在短时间内替换加载时间中断,其中cocos2d没有任何要渲染的内容 - 直到加载新的tilemap。我猜测线程不是一个解决方案,它只是给你一个不同的症状同样的问题。

我认为解决这个问题的方法是:

  • 在需要显示新加载的tilemap部分之前,开始线程加载某个阈值
  • 创建较小的子区域图(最好像屏幕尺寸一样小或稍大),以便加载更快
  • 将tilemaps预加载到内存中,但为那些不应该渲染的
  • 设置visible = NO

如果你只是因为他们消耗的内存而无法加载所有的图块地图,而其他选项也无法运行,除非你可以实现自己的内存优化版本的tilemap系统,否则你运气不好。 / p>