Cocos2D постоянно прокручивает игру на основе тайлов: странная вспышка только в устройстве
Спасибо за вашу помощь и чтение этого.
Вот мой источник: Download_Cocos2d_Continuous_Scrolling_Tile_Based_Game
Это постоянно прокручиваемая игра на основе плитки Cocos2D. В этой игре тайлы карт загружаются и выпускаются по мере необходимости - третья карта тайлов загружается при выходе первой. Тот же процесс повторяется. Наблюдается некоторый рывок в листе прокрутки из-за времени загрузки. Поэтому я использовал отдельный поток для загрузки карты тайлов. Это вызвало странную вспышку на экране... только на устройстве.
- Как я могу исправить эту вспышку?
- Как я могу избежать небольшого рывка в свитке плитки? или какой-то альтернативный способ загрузки?
Вот код загрузки:
[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 ответ
Асинхронно загружая карту тайла, вы просто заменяете прерывание времени загрузки на короткое время, когда cocos2d не нужно ничего визуализировать - пока не будет загружена новая карта тайла. Я предполагаю, что многопоточность здесь не является исправлением, она просто дает вам другой симптом для той же проблемы.
Я думаю, что вы можете исправить это:
- начать потоковую загрузку определенного порогового значения до того, как необходимо отобразить вновь загруженный раздел тайла карты
- создавая меньшие карты листов подразделов (в идеале такие же маленькие, как размер экрана или немного больше), чтобы они загружались быстрее
- Предварительно загрузите тайлы в память, но установите значение visible = NO для тех, которые не должны отображаться
Если вы не можете загрузить все карты тайлов просто из-за занимаемой ими памяти, а другие опции не сработают, либо вам не повезет, если вы не сможете реализовать свою собственную оптимизированную для памяти версию системы тайлкарт.