Самый эффективный способ справиться с несколькими CCSprites?

У меня есть четыре разных типа объектов в моей среде (box2d), каждый тип объекта имеет несколько экземпляров самого себя, и я хотел бы найти наиболее эффективный способ добавления и управления всеми CCSprites. Все спрайты взяты из разных файлов, поэтому было бы лучше создать каждый спрайт и добавить его в структуру данных (NSMutableArray) или использовать CCSpriteBatchNode, даже если каждый файл CCSprite отличается (для каждого типа объекта)? Спасибо.

@interface LevelScene : CCLayer
{
    b2World* world;
    GLESDebugDraw *m_debugDraw;

    CCSpriteBatchNode *ballBatch;
    CCSpriteBatchNode *blockBatch;
    CCSpriteBatchNode *springBatch;
    CCSprite *goal;
}

+(id) scene;

// adds a new sprite at a given coordinate
-(void) addNewBallWithCoords:(CGPoint)p;

// loads the objects (blocks, springs, and the goal), returns the Level Object
-(Level) loadLevel:(int)level;

@end

person SteveWight    schedule 07.02.2011    source источник


Ответы (1)


Ну, CCSpriteBatchNode, скорее всего, не ваш ответ, если вы используете разные текстуры. Из документации Cocos2D здесь:

CCSpriteBatchNode подобен пакетному узлу: если он содержит дочерние элементы, он отрисовывает их за один вызов OpenGL (часто известный как «пакетное рисование»). CCSpriteBatchNode может ссылаться на одну и только одну текстуру (один файл изображения, один атлас текстуры).

Так что это вне. Якобы вы добавляете эти объекты CCSprite в CCLayer (или какой-то другой объект CCNode), верно?

Нет необходимости создавать отдельный массив для управления дочерними объектами — Cocos2D предоставляет вам свойство children любого узла. Если вы [myLayer addChild:newSprite], у вас будет ссылка на него в children.

Это помогает? Я могу расширить свой ответ, если вы дадите мне немного больше информации о вашем варианте использования.

person makdad    schedule 08.02.2011
comment
Спасибо за ответ @phooze, приятно знать, что я могу получить доступ к любому объекту через дочернюю ссылку. Я добавил код, чтобы прояснить свой вопрос. Я думал о том, чтобы иметь отдельный CCSpriteBatchNode для каждого объекта, который будет иметь несколько спрайтов, потому что это снизит количество вызовов OpenGL. - person SteveWight; 08.02.2011
comment
На самом деле в идеале у вас должен быть 1 BatchNode для всех детей, использующих один и тот же файл атласа текстуры / изображения (согласно документации, которой поделился @phooze) - person Goles; 08.02.2011
comment
Спасибо @Mr.Gando, теперь я начинаю немного лучше понимать CCSpriteBatchNode. - person SteveWight; 09.02.2011
comment
@nardsurfer, удачи - Cocos2D очень мощный, но, как и в случае с любой другой структурой, есть кривая обучения ... Мне еще предстоит многому научиться, я просто являюсь экспертом SpriteBatchNode из-за моего собственного проекта;) - person makdad; 10.02.2011