cocos2d не может добавить спрайт к другому спрайту - PullRequest
2 голосов
/ 13 февраля 2012

У меня есть фон, который расширяет CCSprite от фреймворка cocos2d. И я добавил этот спрайт в геймплеер. Теперь в этом фоновом классе я пытаюсь добавить другие CCSprites с именем Star, например:

//create the stars
stars = [[CCArray alloc] init];
for (int i = 0; i < 10; i++) 
{
    Star* star = [[Star alloc ] initWithFile:@"star-hd.png"];
    CGSize screensize = [[CCDirector sharedDirector] winSize];
    //CCLOG(@"screensize: %f, %f", screensize.width, screensize.height);
    CGPoint newstarlocation;
    newstarlocation.x = CCRANDOM_0_1() * screensize.width;
    newstarlocation.y = CCRANDOM_0_1() * screensize.height;
    star.position = newstarlocation;
    [self addChild:star z:i];
    [stars addObject:star];
}

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

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

Ответы [ 3 ]

1 голос
/ 12 октября 2012

Вы не можете вкладывать спрайты, но вы можете (должны) вкладывать слои.

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

Ленивый пример (на C ++):

CCLayer *backgroundLayer = CCLayer::create();
CCSprite *skySprite = CCSprite::createWithSpriteFrameName("sky_sprite.png"); 
CCSprite *starsSprite = CCSprite::createWithSpriteFrameName("stars_sprite.png");

backgroundLayer->addChild(skySprite);
backgroundLayer->addChild(starsSprite);

CCLayer *gameLayer = CCLayer::create();

scene->addChild(backgroundLayer);
scene->addChild(gameLayer);    
1 голос
/ 10 ноября 2012

Просто чтобы прояснить точку зрения Стеффена (у которого, между прочим, есть одна из лучших тамбуксов).Звезды, вероятно, не появятся, называя их "star-hd.png".Скорее вы должны ссылаться на "star.png".Cocos2d автоматически ищет суффиксы '-hd' и '-ipad' на ваших изображениях, чтобы увидеть, какое изображение должно быть связано с каким устройством.Вы можете изменить суффикс, который ищет программа, посмотрев файл AppDelegate.m, в котором вы найдете этот код.

suffixes are going to be used
[sharedFileUtils setiPhoneRetinaDisplaySuffix:@"-hd"];      // Default on iPhone RetinaDisplay is "-hd"
[sharedFileUtils setiPadSuffix:@"-hd"];                 // Default on iPad is "ipad"
[sharedFileUtils setiPadRetinaDisplaySuffix:@"-ipadhd"];    // Default on iPad RetinaDisplay is "-ipadhd"
0 голосов
/ 13 февраля 2012

Я не понимаю, почему вы хотите вкладывать спрайты, и не только это, это будет очень эффективно. Напишите класс Star, содержащий спрайт и дочерние спрайты.

Это позволяет вам делать это, потому что cocos2d любит CCNode, почти все происходит от него. Это не значит, что CCSprite занимается рисованием своих детей. CCLayer и CCSprite могут быть добавлены CCNodes. Просто у них разные обработчики.

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

...