cocos2d无法添加精灵到另一个精灵
问题描述:
我有一个背景,从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不允许嵌套子画面吗?如果允许的话,我如何嵌套精灵?
答
我不明白你为什么想嵌套精灵,不仅如此,它会非常有效。写一个包含精灵的星类和子精灵。
它可以让你做到这一点,因为cocos2d喜欢CCNode
,几乎所有东西都来自它。这并不意味着CCSprite
处理他们的孩子。 CCLayer
和CCSprite
都可以添加CCNodes
。这只是他们的处理者是不同的。
你也可以更高效一点,因为那样你就可以精灵批量生成,这比直接将精灵直接绘制到游戏层上效率更高。
答
你不能嵌套精灵,但你可以(应该)嵌套图层。
改为创建背景图层,将背景精灵和星形精灵添加到背景图层,并在游戏图层之前将背景图层添加到场景中。通过这种方式,您可以将游戏背景和其他背后的背景保持分开,并且可以根据需要添加尽可能多的精灵。
懒惰的例子(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);
答
只是进一步明确斯特芬的点(谁的方式有最好的啧啧书籍之一在那里)。星星可能不会将它们称为“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"
代码似乎是正确的,请尝试使用不同的图像(star.png)和固定位置(星位置是相对* *(即偏移)父(背景精灵)的位置。最后,什么是是否将星星添加到自己的数组中?毕竟,您可以使用添加星星的子数组,如果需要,可以给它们使用相同的标记来区分其他节点。 – LearnCocos2D 2012-02-13 20:14:20