Cocos2d sprite的父级不反映真实的比例值

时间:2013-06-30 23:01:57

标签: ios objective-c cocos2d-iphone

我遇到了确定CCSprite父节点的比例值的问题。

在我的游戏中,我有一个扩展CCLayer并根据游戏触发器扩展自身的类。这个CCLayer的某些子精灵的数学计算在我扩展父CCLayer后变得不准确。例如,我有一个坦克精灵,需要确定父节点内的触发点。

每当我缩放图层并询问图层的比例值时,它们都是准确的。但是,当我轮询图层中包含的精灵的父级比例值时,它们总是显示为一个。

// From within the sprite
CCLOG(@"ChildSprite-> Parent's scale values are scaleX: %f, scaleY: %f",
      self.parent.scaleX, self.parent.scaleY); // Outputs 1.0,1.0

// From within the layer
CCLOG(@"Layer-> ScaleX : %f, ScaleY: %f , SCALE: %f",
      self.scaleX, self.scaleY,     self.scale); // Output is 0.80,0.80

有人可以向我解释为什么会这样吗?我不明白为什么这些价值观不同。也许我完全不了解Cocos2d的内部设计。任何帮助表示赞赏。

编辑:这是我用来将精灵插入图层的代码

EarthTank * earthTank = [[EarthTank alloc] initWithWorld:self->world  
atLocation:spawnPointRight withID:pid];
earthTank.tankShaft = shaft; 
[earthTank createInitialArsenal:tempPlayer];
[earthTank addAndAlignTankShaft];
[spriteBatchNode addChild:earthTank z:2];

所以问题是self.parent(在sprite中调用)引用SpriteBatchNode而不是层本身。如果您将调用更改为self.parent.parent,则可以找到图层的真实比例值。

2 个答案:

答案 0 :(得分:0)

听起来像self.parent实际上不是图层。检查一下。

答案 1 :(得分:0)

每个CCNode都有一个独立的比例,但从父对象(嵌套)开始的比例是累积的。

EG。父母比例将影响所有对象,但是孩子不会影响其父母。

例如,如果父图层的缩放比例为50%,那么即使单个对象的缩放比例为100%,所有子图层在显示时也会有50%的因素。

数学,0.50 * 1.00 = 0.50