iphone - 如何获取由子 Sprite 组成的CCSprite的高度和宽度(Cocos2D)

标签 iphone xcode cocos2d-iphone ccsprite

我有这样的东西

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

最佳答案

你可以做到,但你必须自己进行计算。标准内容大小属性返回 Sprite 纹理的大小,但由于 Sprite 没有纹理,因此大小为 0。

那你做什么呢?那么,您将必须编写自己的方法来查看 Sprite 的每个子级,并考虑它们的大小以及与根 Sprite 位置的偏移量。如果您不知道要向根添加多少个 Sprite ,则可能会变得有点复杂,但您可以编写一般情况。

-(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);
}

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

关于iphone - 如何获取由子 Sprite 组成的CCSprite的高度和宽度(Cocos2D),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14366189/

相关文章:

iphone - iOS 6 iAd 奇怪警告

c++ - 如何构造可以使用指针成员对指针数组进行排序的函数

ios - Controller 中的 Braintree ios sdk 下降不继续付款

ios - box2d 调试绘图不工作

iOS:ccTouchesBegan 可以包含多个触摸吗?

iPhone重新加载表数据

iphone - iOS:让 NSAttributedString-Additions-for-HTML 工作?

php - iOS 中的身份验证 - 你能使用 cookies/session 吗?

iphone - 只显示一次设置窗口

optimization - cocos2d 中的多个粒子系统