Вы правы насчет CCSpriteBatchNode.
CCSpriteBatchNode похож на пакетный узел: если он содержит дочерние элементы, он будет рисовать их за 1 единственный вызов OpenGL (часто известный как «пакетная отрисовка»), при отсутствии CCSpriteBatchNode (в данном случае) все «пакетные отрисовки» будут называться как количество детей (спрайтов).
CCSpriteBatchNode может ссылаться на одну и только одну текстуру (один файл изображения, один атлас текстуры), т.е. спрайт-лист, созданный zwoptex. Только CCSprites, которые содержатся в этой текстуре, могут быть добавлены в CCSpriteBatchNode. Все CCSprites, добавленные в CCSpriteBatchNode, отрисовываются в одном вызове отрисовки OpenGL ES. Если CCSprites не добавляются в CCSpriteBatchNode, то для каждого из них потребуется вызов отрисовки OpenGL ES, что является менее эффективным.
В соответствии с вашим сценарием вам не нужно использовать CCSpriteBatchNode, поскольку в каждый момент времени отображается только одна текстура.
Итак, я хочу знать: я должен анимировать спрайт кадр за кадром (без огромной текстуры)? Или можно использовать эту огромную текстуру, но по-другому?
Это не имеет значения. Вы будете загружать текстуру 2048 x 2048 в любом случае. Надо подумать, почему только одна текстура 2048 x 2048 предупреждает об уровне 2? сколько таких текстур вы загружаете. BTW 2048 x 2048 поддерживается только на iPod3G / iPhone3GS выше (что нормально).
В случае, если вы загружаете много текстур (что мне кажется правдой). Вам нужно запрограммировать логику, в которой вы можете выгружать текстуры, когда они не нужны.
Посмотрите на следующие методы:
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:fileName];
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];
[[CCTextureCache sharedTextureCache] removeUnusedTextures];
Что касается анимации, вы можете создать CCAnimation и использовать ее или (в зависимости от вашего сценария) вы можете использовать setDisplayFrame (кадр CCSpriteFrame);