Помогите загрузить текстуру в переменную в Objective-C - PullRequest
1 голос
/ 02 июля 2011

У меня есть спрайт "шар", который меняет свою текстуру, когда происходит определенный сценарий.Я изменяю его текстуру так:

[ball setTexture:[[CCTextureCache sharedTextureCache] addImage:@"red.png"]];

Это работает;он изменяет спрайт шара, чтобы использовать изображение red.png.Как бы я справился с этим, если у меня есть около 20 шаров, которые нужно переключиться на использование этого спрайта?Пропустил бы я каждый шарик и «addImage»?

Если бы я мог, я бы хотел загрузить текстуру один раз, сохранить ее в переменной (называемой как «redTexture»), а затем иметь возможность назначить еек любому из объектов шара.

Любой совет о том, как подойти к этому, будет огромной помощью, спасибо!

1 Ответ

2 голосов
/ 03 июля 2011

Если бы вы поместили этот оператор, скажем, в цикл for, вы бы снова и снова добавляли изображение red.png в общий кэш текстур, что, я сомневаюсь, вам и нужно.

Давайте немного вернемся назад и переписаем вещи, начав с добавления изображения red.png в общий кэш текстур, в отдельной строке:

[[CCTextureCache sharedTextureCache] addImage:@"red.png"];

Впоследствии вы снова получите ту же текстуру, просто вызвав [CCTextureCache sharedTextureCache]. Пока вы не добавите другое изображение в общий кеш текстур, то есть.

CCTextureCache является одноэлементным, и его документы не предполагают, что есть способ сделать копию общего кэша текстур (который был бы идеальным для сохранения вашей redTexture). В таком случае просто создайте переменную и укажите ее на [CCTextureCache sharedTextureCache]; просто будьте осторожны, чтобы не добавлять в него другие изображения, прежде чем закончить с ним:

CCTextureCache *redTexture = [CCTextureCache sharedTextureCache];

Теперь давайте предположим, что у вас уже есть массив (или изменяемый массив) с именем ballArray, который содержит 20 объектов ball. Вы можете просмотреть их так:

for (YourBallObject *ball in ballArray)
{
    [ball setTexture:redTexture];
}

Или даже лучше, вы могли бы сделать это:

[ballArray makeObjectsPerformSelector:@selector(setTexture:) withObject:redTexture];

Удачи в ваших начинаниях.

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