【问题标题】:How to get the height and width of a CCSprite made up of sub sprites (Cocos2D)如何获取由子精灵组成的CCSprite的高度和宽度(Cocos2D)
【发布时间】:2013-01-16 19:26:30
【问题描述】:

我有这样的事情

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 返回节点及其子节点在屏幕上占用的实际高度和宽度?

【问题讨论】:

  • CCSprite 是一个CCNode 子类,它可以绘制一个带纹理的矩形。为什么需要rootSprite 成为CCSprite?它本身不绘制任何纹理,是吗?
  • 它必须是 CCSprite 或其子类才能作为子类添加到 CCSpriteBatchNode。
  • 我认为CCSpriteBatchNode 不支持带孩子的CCSprites,是吗?
  • @fiddler 是的,您可以将 CCSprites 作为子级添加到 CCSpriteBatchNode 的子级
  • @Sylvan 很高兴知道 :) 谢谢

标签: iphone xcode cocos2d-iphone ccsprite


【解决方案1】:

您可以这样做,但您必须自己进行计算。标准内容大小属性返回精灵纹理的大小,但由于您的精灵没有纹理,它的大小为 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);
}

换句话说,您必须检查每个子精灵并检查其大小如何影响根精灵的整体大小。

【讨论】:

  • 你应该使用递归解决方案,如果这些孩子有自己的孩子怎么办?
【解决方案2】:

是的,你可以得到 CCSprite 对象的高度和宽度。试试这个:

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

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

它解决了你的问题。

【讨论】:

    【解决方案3】:

    This thread 在 cocos2d-iphone 的论坛上有一个解决方案。本质上只是遍历 node.children 数组并更新父级的 contentSize

    【讨论】:

      【解决方案4】:

      您可以将以下内容用于精灵的高度和宽度

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

      【讨论】:

        猜你喜欢
        • 2011-01-31
        • 2012-10-21
        • 2014-06-25
        • 1970-01-01
        • 2012-12-12
        • 1970-01-01
        • 1970-01-01
        • 2014-08-23
        • 1970-01-01
        相关资源
        最近更新 更多