我有这样的东西
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/