Проблемы с производительностью рендеринга тайлов методом UIImage imageNamed - PullRequest
1 голос
/ 20 апреля 2011

У меня 5 плиток.Каждый размером 16x16 пикселей, размером 8 КБ.Они все загружены с использованием imageNamed.Например, [UIImage imageNamed: @ "dirt.png"].Они загружаются вне drawRect, в init.У меня есть массив под названием «карта», который отображает, где эти плитки идут.В DrawRect у меня есть немного кода, который визуализирует сцену, используя два цикла for, как показано ниже.

tileNum = startPoint;
for(int i = 0; i< stageHeight; i++){
    for(int ii = 0; ii< stageWidth; ii++){
        if(map[tileNum] == 0){
            [dirt drawInRect:CGRectMake(ii*tileSize, i*tileSize, tileSize, tileSize)];
        }else if(map[tileNum] ==1){
            [tree1 drawInRect:CGRectMake(ii*tileSize, i*tileSize, tileSize, tileSize)];
        }else if(map[tileNum] ==2){
            [tree2 drawInRect:CGRectMake(ii*tileSize, i*tileSize, tileSize, tileSize)];
        }else if(map[tileNum] ==3){
            [tree3 drawInRect:CGRectMake(ii*tileSize, i*tileSize, tileSize, tileSize)];
        }else if(map[tileNum] ==4){
            [tree4 drawInRect:CGRectMake(ii*tileSize, i*tileSize, tileSize, tileSize)];
        }
        tileNum++;
    }
    tileNum += (mapWidth - stageWidth);
}

В симуляторе все работает великолепно, как я и хочу.Но когда я вставляю устройство (3GS), частота кадров замедляется до ползания (около 1 кадра в секунду).Я подозреваю, что это может быть связано с использованием imageNamed.Или это только потому, что я рендерил слишком много плиток?(В 16x16 я рендерил 600 плиток на кадр, но это крошечные файлы, и 90% нарисованных плиток - это плитка грязи).И если да, то как лучше создать простой движок плиток?

Это моя первая попытка опубликовать вопрос.Спасибо всем, кто помогает.

1 Ответ

1 голос
/ 20 апреля 2011

Для такого рода работы вам, скорее всего, повезет с атласом текстуры гораздо лучше, чем с отдельными файлами изображений.Трудно сказать точно с количеством кода, размещенного там, но я предполагаю, что вы работаете над какой-то игрой, что означает, что вы, вероятно, захотите использовать opengl для рисования.

IРекомендую проверить Руководство по программированию OpenGL ES от Apple в качестве отправной точки, особенно раздел Текстурные данные , он мне очень помог, когда я начинал погружаться в gamedev.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...