Как наложить CCSprite поверх CCSprite? - PullRequest
1 голос
/ 23 января 2012

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

Однако я понял, что мне нужно изменить цвет контейнера, чтобы обозначить визуальный эффект (например, нажатие кнопки).

Например:

Неактивное состояние = серый контейнер. В состоянии = красный контейнер

Вместо того, чтобы повторять каждый аватар с включенным / выключенным состоянием, я бы хотел разделить контейнер и аватары, немного похоже на этот грубый рисунок;

+------+    +------+  
|      |    |      |    O
| OFF  |    | ON   |   / \
|      |    |      |   --- 
+------+    +------+

Таким образом, мы разделяем отключенный контейнер, включенный контейнер и аватары.

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

Сорт, как создание CCSprite из различных CCSprites, наложенных друг на друга.

Таким образом, как я могу наложить несколько спрайтов друг на друга, а затем создать CCSprite, используя многоуровневые CCSprites?

Спасибо.

/ Правка: добавлен код.

Я создал некоторый код с использованием CCLayer, а затем добавил свои спрайты как часть слоя.

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

        CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode 
                                          batchNodeWithFile:@"avatars.png"];
        [self addChild:spriteSheet];

        CCSprite *empty = [CCSprite spriteWithSpriteFrameName:@"hold_empty.png"];
        CCSprite *boss1 = [CCSprite spriteWithSpriteFrameName:@"hold_boss_1.png"];

        CCLayer *holderExample = [[CCLayer alloc] init];
        [holderExample setContentSize:CGSizeMake(70, 72)];
        [holderExample setPosition:CGPointMake(100, 100)];
        [holderExample addChild:empty];
        [holderExample addChild:boss1];

        [self addChild:holderExample];

Это похоже на слой с двумя спрайтами внутри. Это кажется правильным, но я не уверен, что это правильно, потому что я не уверен, смогу ли я сделать его кликабельным или обработать другие события.

Кроме того, я хочу добавить слой для цвета.

В Z-порядке:

1) -2 empty.png

2) -1 цветной слой

3) 0 аватар

1 Ответ

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

Вы можете создавать изображения для состояний включения / выключения и добавлять в качестве дочерних элементов пользовательский CCSprite с изображениями включения, выключения и аватара.Также вы можете применить цвет к аватару, чтобы сделать эффект выделения.Не знаю, если это именно то, что вам нужно.

// Edit1 Проверьте эти источники и дайте мне знать, если это то, что вам нужно.Довольно просто то, что я сделал, чтобы показать вам, что я имею в виду о цвете.Надеюсь, что эта помощь https://rapidshare.com/files/3668681798/TestAvatar.zip

...