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