2012-02-13 114 views
2

我有一个背景,从cocos2d框架延伸CCSprite。我已经将这个精灵加入了游戏玩家。现在,在这样的背景类我尝试添加其他CCSprites名为星像这样:cocos2d无法添加精灵到另一个精灵

//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不允许嵌套子画面吗?如果允许的话,我如何嵌套精灵?

+0

代码似乎是正确的,请尝试使用不同的图像(star.png)和固定位置(星位置是相对* *(即偏移)父(背景精灵)的位置。最后,什么是是否将星星添加到自己的数组中?毕竟,您可以使用添加星星的子数组,如果需要,可以给它们使用相同的标记来区分其他节点。 – LearnCocos2D 2012-02-13 20:14:20

回答

-1

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

它可以让你做到这一点,因为cocos2d喜欢CCNode,几乎所有东西都来自它。这并不意味着CCSprite处理他们的孩子。 CCLayerCCSprite都可以添加CCNodes。这只是他们的处理者是不同的。

你也可以更高效一点,因为那样你就可以精灵批量生成,这比直接将精灵直接绘制到游戏层上效率更高。

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);  
1

只是进一步明确斯特芬的点(谁的方式有最好的啧啧书籍之一在那里)。星星可能不会将它们称为“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" 
相关问题