Cocos2d добавляет фоновое изображение к слою?

Я только что закончил читать часть документации по cocos2d, и, насколько я понимаю, чтобы добавить фоновое изображение к слою, вам нужно сделать что-то вроде:

Sprite * bg = [Sprite spriteWithFile:@"Background.png"];
[layer addChild:bg z:0];

Хотя в моем тестировании вы можете просто добавить спрайт прямо в сцену следующим образом:

@implementation IntroScene
- (id) init {
self = [super init];
if (self != nil) {
    Sprite * bg = [Sprite spriteWithFile:@"Background.png"];
    [bg setPosition:ccp(240, 160)];
    [self addChild:bg z:0];
    [self addChild:[MenuLayer node] z:1];
}
return self;

}

В чем разница между этими двумя вариантами и как лучше установить фон для слоя? Любая помощь будет оценена.


person Oscar Gomez    schedule 23.12.2009    source источник
comment
Имейте в виду, что с тех пор Sprite стал CCSprite. Да, имейте в виду, Даниал.   -  person Danyal Aytekin    schedule 26.10.2011


Ответы (4)


Вам не нужно иметь слой, но они удобны. Думайте о слоях как о способе группировки спрайтов (как визуально, так и организационно). Вы можете захотеть, чтобы фоновые изображения были сгруппированы в один слой, а все враги в игре — в другой слой. Это позволяет более аккуратно работать с каждым набором. например Вы можете удалить определенный слой вместо того, чтобы находить всех врагов и удалять их.

Если это поможет, поэкспериментируйте со слоями в Photoshop или графическом редакторе. Слои в cocos2d работают аналогично.

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

person Colin Gislason    schedule 23.12.2009

Кроме того, слои управляют порядком прорисовки (помимо любого межслойного порядка z).

В geoSpark, например, у меня есть фоновый слой, искровой слой, слой пользовательского интерфейса и т. д. (упрощенный). Но это позволяет мне быть уверенным, что мой пользовательский интерфейс всегда находится над любым игровым материалом (слой искры) и над всем, что находится над фоном.

Если ваша игра использует только аддитивный рендеринг, порядок отрисовки не будет иметь большого значения. :)

-- Дэйвид

person David Whatley    schedule 01.01.2010

сцена — это доска, слой — это страница... новости пишутся на странице, но при желании вы можете написать на доске. Если вы хотите стереть все новое.

person Thanh Vũ Trần    schedule 08.11.2012

В cocos2d мы можем добавить любой узел на любой узел. Но это зависит от уровня иерархии.

Вы можете добавлять слои к сценам. Если вы хотите такое же свойство или ищите все слои, которые вы добавляете в CCScene, вы можете добавить их в CCScene (как во втором случае). но если вы хотите иметь разные функции на каждом слое, добавьте их в CCLayer.

CCLayer предназначен для группировки набора узлов/спрайтов для какой-либо цели. Например, вы можете добавить слой, который включает в себя параметры после приостановки игры, или слой HUD для отображения какого-либо вида всегда на экране вместе с некоторым слоем прокрутки (как в некоторых платформерах с прокруткой).

Наконец, вы можете даже создать CCNode на CCScene, слой на другом слое и даже CCNode на CCSprite. Но порядок отрисовки графического контекста в cocos2d отличается.

Надеюсь, вы уловили разницу.

Удачи!

person Kumar C    schedule 18.12.2013