Cocos2d iphone Cocos2D连续滚动瓷砖游戏:奇怪的闪光只在设备上

Cocos2d iphone Cocos2D连续滚动瓷砖游戏:奇怪的闪光只在设备上,cocos2d-iphone,Cocos2d Iphone,谢谢你的帮助和阅读 以下是我的资料来源: 它是一款基于连续滚动瓷砖的CoCo2D游戏。在这个游戏中,tileMaps是根据需要加载和发布的-第三个tileMap是 第一个释放时加载。重复同样的过程。由于加载时间的原因,观察到瓷砖卷轴出现一些抖动。所以我使用单独的线程来加载平铺贴图。这在屏幕上引起了奇怪的闪光…只有在设备上 我怎样才能修理这个闪光灯 我怎样才能避免在瓦片卷轴上的小抖动?或其他装载方法 以下是加载代码: [NSThread detachNewThreadSelector:@selec

谢谢你的帮助和阅读

以下是我的资料来源:

它是一款基于连续滚动瓷砖的CoCo2D游戏。在这个游戏中,tileMaps是根据需要加载和发布的-第三个tileMap是 第一个释放时加载。重复同样的过程。由于加载时间的原因,观察到瓷砖卷轴出现一些抖动。所以我使用单独的线程来加载平铺贴图。这在屏幕上引起了奇怪的闪光…只有在设备上

  • 我怎样才能修理这个闪光灯
  • 我怎样才能避免在瓦片卷轴上的小抖动?或其他装载方法
  • 以下是加载代码:

    [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];
    }
    

    通过异步加载tilemap,您只需将加载时间中断替换为cocos2d没有任何渲染的短时间,直到加载新的tilemap。我猜线程并不是一个解决方案,它只是为同一个问题提供了不同的症状

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

    • 在需要显示新加载的tilemap部分之前,开始线程加载特定阈值
    • 创建更小的分段tilemaps(理想情况下与屏幕大小一样小或稍大),以便加载更快
    • 将tilemaps预加载到内存中,但对于那些不应该渲染的贴图,将visible设置为否
    如果仅仅因为tilemap占用的内存而无法加载所有tilemap,并且其他选项也无法工作,那么除非您能够实现自己的、内存优化版本的tilemap系统,否则您就运气不佳