Как добавить несколько листов спрайтов в cocos2D и сделать их похожими на один спрайт? - PullRequest
1 голос
/ 30 января 2012

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

Это мой код:

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

CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"PotkaEntry.pvr.ccz"];

[self addChild:spriteSheet];

NSMutableArray *entryAnimFrames = [NSMutableArray array];

for(int i = 1; i<=12; i++)
{
    [entryAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"Potka_entry%d.png", i]]];
}

CCAnimationCache *entryAnim = [CCAnimation animationWithFrames:entryAnimFrames delay:0.08f];

CGSize winSize = [CCDirector sharedDirector].winSize;

self->_body1 = [CCSprite spriteWithSpriteFrameName:@"Potka_entry1.png"];

_body1.position = CGPointMake(winSize.width/2, 0);

self.walkAction = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:entryAnim restoreOriginalFrame:NO]];

[_body1 runAction:_walkAction];

_body1.scale = 0.4;

[spriteSheet addChild:_body1];

id entryAction = [CCMoveTo actionWithDuration:5.0f position:ccp(winSize.width/2,60)];

[_body1 runAction:entryAction];

1 Ответ

5 голосов
/ 30 января 2012

Вам необходимо создать новый CCSpriteBatchNode для каждой используемой вами таблицы спрайтов (под таблицей спрайтов я имею в виду объединенный файл pvr.ccz и файл .plist)

CCSpriteFrameCache - это один кеш, общий для всех ваших сцен и классов. Когда вы вызываете этот метод:

[CCSpriteFrameCache sharedSpriteFrameCache]

Вы не создаете новый объект CCSpriteFrameCache каждый раз, есть только ОДИН экземпляр. Вы храните все загруженные спрайт-листы в этом единственном кэше. Таким образом, вы можете загрузить 2 спрайт-листа в кеш примерно так:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"sheet1.plist"]; 
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"sheet2.plist"];

Затем вам нужно создать CCSpriteBatchNode для КАЖДОЙ spritesheet, вы не можете иметь более одного листа в узле пакета:

CCSpriteBatchNode *spriteSheet1 = [CCSpriteBatchNode batchNodeWithFile:@"sheet1.pvr.ccz"]; 
CCSpriteBatchNode *spriteSheet2 = [CCSpriteBatchNode batchNodeWithFile:@"sheet2.pvr.ccz"];

Затем вы можете добавить оба этих пакетных узла в слой, если хотите. Спрайты, добавленные в узлы пакета, должны быть из той таблицы, которую использует узел пакета.

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