CCSpriteBatchNode: использовать один кадр или целый текстурный атлас? - PullRequest
3 голосов
/ 19 февраля 2012

Преимущество использования CCSpriteBatchNode заключается в том, что каждый из его дочерних элементов не отрисовывается отдельно в OpenGL, поэтому, если у вас много одинаковых изображений на экране, это повышает производительность при использовании пакетного узла.

Однако мне любопытно, что произойдет, если вы загрузите целый атлас текстуры в CCSpriteBatchNode; Означает ли это, что когда вы используете один спрайт-кадр в этом текстурном атласе, он рисует (за кадром) все спрайт-кадры внутри текстуры?

Другими словами, есть ли разница в производительности между этим:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"texture.plist"];

 CCSpriteFrame *starFrame=[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"throwstar.png"];

stars=[CCSpriteBatchNode batchNodeWithTexture:starFrame.texture];

[self addChild:stars];

Или вместо этого просто использовать весь текстурный атлас, а не starFrame.texture для пакетного узла?

1 Ответ

1 голос
/ 19 февраля 2012

CCSpriteBatchNode рисует своих потомков.Таким образом, отрисовываются только добавленные к нему дочерние элементы (которые должны быть объектами CCSprite).А поскольку спрайты используют CCSpriteFrame, каждый дочерний элемент отображает только часть текстуры, определенную рамкой спрайта.

Объект CCSpriteFrame содержит ссылку на используемую текстуру.Это та же текстура, что и текстура CCSpriteBatchNode.Другими словами, текстура рамки спрайта всегда является текстурой текстурного атласа, а не только его частью.Это то, что делает CGRect в CCSpriteFrame, он инструктирует спрайт рисовать только определенную область большей текстуры.

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