Cocos2d: узел CCSpriteBatch рисует только спрайты со свойством visible, установленным в true?

Отрисовывает ли узел CCSpriteBatch только спрайты, для свойства visible которых задано значение true?

Или он учитывает также размер экрана? Другими словами. Если спрайт внутри узла находится за пределами экрана, отразится ли это на производительности вызова отрисовки opengl?


person mm24    schedule 17.09.2012    source источник
comment
PS: после получения ответа от LearnCocos2D я провел еще несколько исследований и нашел этот вопрос stackoverflow.com/questions/9502586/, что подтверждает его ответ. Я добавляю это только для дополнительного справочного материала.   -  person mm24    schedule 20.09.2012


Ответы (1)


Нет и нет.

CCSpriteBatchNode всегда рисует все дочерние спрайты. Я не уверен точно, что заставляет спрайты с visible = NO не появляться на экране, но технически он каждый раз рисует все квадраты. Также не учитывается площадь экрана.

Не упакованные спрайты ведут себя по-разному. Если непакетный спрайт не виден, то он просто не отрисован. Однако спрайты за пределами экрана отрисовываются. Cocos2D не имеет возможности пропускать отрисовку узлов за пределами экрана/окна.

Нижеследующее является слухом из того, что я читал за последние годы, так что отнеситесь к этому с долей скептицизма:

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

Это основная проблема реализации тайловой карты cocos2d и причина того, почему она работает так медленно с большими тайловыми картами. Внутренние тайловые карты также используют ту же технику пакетной обработки спрайтов.

person LearnCocos2D    schedule 18.09.2012
comment
поэтому, если я правильно понял, спрайт, который находится в таблице спрайтов, но не добавлен в CCSpriteBatchNode, не рассматривается GPU. Но спрайт, который находится в CCSpriteBatchNode и не виден (например, еще не создан и находится во вражеском кеше), влияет на производительность, поскольку GPU должен вычислить, находится ли соответствующий четырехугольник на экране или нет. Это правильно? - person mm24; 20.09.2012
comment
независимо от того, пакетирован спрайт или нет, если спрайт находится за кадром, графический процессор должен определить, что ему не нужно рисовать спрайт. - person LearnCocos2D; 25.09.2012