2012-02-13 157 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" 
相關問題