несколько CCSpritevFramevCache одновременно - PullRequest
0 голосов
/ 30 января 2012

Я использую CCSpriteFrameCache много, но не могу что-то понять об этом.я могу загрузить много .plist в кеш в начале моей игры?или CCSpriteFrameCache имеет ТОЛЬКО один plist за один раз?

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

    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:[NSString stringWithFormat:@"cand%i.plist",stage]];
     candySheet = [CCSpriteBatchNode batchNodeWithFile:[NSString stringWithFormat:@"cand%i.png",stage]];
[self addChild:candySheet];
sprite1 = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"cand%i.png",1]];

все в порядке?

теперь допустим, что у меня есть 2 spriteSheets и 2 .plist, и я хочу загрузить обаиз них в моем init, и добавить 2 спрайта, каждый из которых должен быть дочерним по отношению к одному CCSpriteBatchNode, и рендерить изображения для каждого спрайта из его собственных spriteSheet и Plist.но тогда я получаю сообщение об ошибке:

CCSprite is not using the same texture id

, поэтому я понимаю, что каждый раз, когда мне нужно загрузить в кэш нужный мне список в определенное время ????

спасибо.

Ответы [ 2 ]

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

Кто-то спрашивал подобное раньше.

Нельзя сделать спрайты дочерними для одного и того же CCSpriteBatchNode, если они не из одной и той же таблицы спрайтов.

Вам необходимо создать новый CCSpriteBatchNode для каждой используемой вами таблицы спрайтов (под таблицей спрайтов я имею в виду объединенный файл изображения и файл .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"];

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

0 голосов
/ 31 января 2012
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"some.plist"];

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

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