2012-02-13 14 views
2

私は、背景がココス2dフレームワークからCCSpriteまで伸びています。そして私はgamelayerにこのスプライトを追加しました。今、このような背景のクラスに私はそうのようなスターという名前の他の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]; 
} 

をしかし、星は表示されません。私はいくつかのことを試しましたが、動作するように思われるのは、バックグラウンドではなく、ガメラレイヤーに星を追加する場合だけです。しかし、それは私が望むものではありません。

spriteをcocos2dでネストすることはできませんか?許可されている場合、スプライトをどのように入れ子にしますか?

+0

コードが正しいようで、異なる画像(star.png)と固定位置を使用してみてください(星の位置が親(背景スプライト)の位置に*相対*(すなわちオフセット)されている。最後に、何ですなぜなら、必要ならば、他のノードを区別するためにすべて同じタグを与えることです。 – LearnCocos2D

答えて

-1

スプライトをネストしたい理由がわかりません。それだけでなく、非常に効率的です。スプライトと子スプライトを含むStarクラスを記述します。

これは、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" 
関連する問題