2

我有一个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中不允许嵌套精灵吗?如果允许,我如何嵌套精灵?

4

3 回答 3

1

只是为了进一步澄清 Steffen 的观点(顺便说一下,他拥有最好的 tut 书籍之一)。星星可能不会出现,称它们为“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"
于 2012-11-09T22:26:13.230 回答
1

你不能嵌套精灵,但你可以(应该)嵌套层。

而是创建一个背景层,将背景精灵和星形精灵添加到其中,并将背景层添加到游戏层之前的场景中。这样一来,您就可以将背景与游戏层分开,并在其他所有事物之后,使用尽可能多的精灵。

懒惰的例子(在 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);    
于 2012-10-12T14:50:19.220 回答
-1

我不明白你为什么要嵌套精灵,不仅如此,它会非常有效。编写一个包含精灵和子精灵的 Star 类。

它允许你这样做,因为 cocos2d 喜欢CCNode,几乎所有东西都来源于它。这并不意味着可以CCSprite处理绘制他们的孩子。CCLayer和都CCSprite可以CCNodes添加。只是他们的处理程序不同。

这样你也会更有效率,因为你可以批量处理精灵,这比直接将精灵绘制到游戏层要高效得多。

于 2012-02-13T17:47:27.163 回答