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 回答