2

私はこのようなものを持っています

CCSprite *rootSprite = [CCSprite node];
CCSprite *subSpriteOne = [CCSprite spriteWithFile:@"sprite1.png"];
subSpriteOne.position = ccp(10, 10);
[rootSprite addChild:subSpriteOne];
CCSprite *subSpriteTwo = [CCSprite spriteWithFile:@"sprite2.png"];
subSpriteTwo.position = ccp(100, 100);
[rootSprite addChild:subSpriteTwo];

私の問題は、プロパティrootSprite.size.heightとrootSprite.size.widthの両方が0.0を返すことです。rootSpriteに、ノードとそのサブノードが画面上で占めている実際の高さと幅を返すようにする方法はありますか?

4

4 に答える 4

2

あなたはそれをすることができます、しかしあなたはあなた自身で計算をしなければならないでしょう。標準のコンテンツサイズプロパティは、スプライトのテクスチャのサイズを返しますが、スプライトにはテクスチャがないため、サイズは0になります。

それで、あなたは何をしますか?スプライトの各子を調べ、それらのサイズとルートスプライトの位置からのオフセットを考慮する独自のメソッドを作成する必要があります。ルートに追加するスプライトの数がわからない場合は少し複雑になる可能性がありますが、一般的なケースを作成することはできます。

-(CGSize) getSizeOfRootSprite:(CCSprite*)root
{
    float minX = 0;
    float minY = 0;
    float maxX = root->getContentSize().width;
    float maxY = root->getContentSize().height;
    for (CCSprite *child in root.children)
    {
        CGPoint pos = child.position;
        CGSize size = child.contentSize;
        if (pos.x - size.width/2 < minX) minX = pos.x - size.width/2;
        if (pos.y - size.height/2 < minY) minY = pos.y - size.height/2;
        if (pos.x + size.width/2 > maxX) maxX = pos.x + size.width/2;
        if (pos.y + size.height/2 > maxY) maxY = posY + size.height/2;
    }
    return CGSizeMake(maxX - minX, maxY - minY);
}

つまり、各子スプライトを調べて、そのサイズがルートスプライトの全体的なサイズにどのように寄与するかを確認する必要があります。

于 2013-01-16T20:30:25.937 に答える
1

はい、CCSpriteオブジェクトの高さと幅を取得できます。これを試して:

CCSprite *subSpriteOne = [CCSprite spriteWithFile:@"sprite1.png"];

int height = [subSpriteOne boundingBox].size.height;
int width= [subSpriteOne boundingBox].size.width;

それはあなたの問題を解決します。

于 2013-01-16T19:34:10.743 に答える
0

cocos2d-iphoneのフォーラムのこのスレッドには解決策があります。基本的には、node.children配列をウォークし、親のcontentSizeを更新するだけです。

于 2013-01-16T20:20:40.497 に答える
0

スプライトの高さと幅には以下を使用できます

sprite.getContentSize()。height; sprite.getContentSize()。width;

于 2013-07-30T05:51:12.187 に答える