我有一个从cocos2d框架扩展CCSprite
的背景。我已将此精灵添加到游戏玩家。现在在这个后台课程中,我尝试添加名为Star的其他CCSprites
,如下所示:
//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中不允许嵌套sprite?如果允许,我如何嵌套精灵?
答案 0 :(得分: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 :(得分: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"
答案 2 :(得分:-1)
我不明白为什么你想要嵌套精灵,不仅如此,它会非常有效。写一个包含精灵的Star类,以及子精灵。
它允许你这样做,因为cocos2d喜欢CCNode
,几乎所有东西都来自它。这并不意味着CCSprite
处理他们的孩子。 CCLayer
和CCSprite
都可以添加CCNodes
。只是他们的处理程序是不同的。
你也可以更有效率,因为那时你可以精灵批处理,这比直接向游戏层绘制精灵更有效。