cocos2d,CC_HONOR_PARENT_TRANSFORM_SCALE,我如何使用此枚举属性?

时间:2011-01-19 18:45:40

标签: objective-c cocos2d-iphone

我想向sprite1添加一个sprite2,缩放精灵1的宽度而不缩放sprite2。

我在Cocos2d api的下面找到了代码; CCSprite.h第54行,但我不知道如何使用它,也不知道“1<< 2”的意思。

基本上,我正在做以下但是它不起作用:

[self addChild:sprite1];

[sprite1 addChild:sprite2]

sprite1.scaleX = 2;

sprite2.CC_HONOR_PARENT_TRANSFORM_SCALE = false; ???

是的,不确定如何使用枚举。

谢谢

typedef enum {
//! Translate with it's parent
CC_HONOR_PARENT_TRANSFORM_TRANSLATE =  1 << 0,
//! Rotate with it's parent
CC_HONOR_PARENT_TRANSFORM_ROTATE    =  1 << 1,
//! Scale with it's parent
CC_HONOR_PARENT_TRANSFORM_SCALE     =  1 << 2,

//! All possible transformation enabled. Default value.
CC_HONOR_PARENT_TRANSFORM_ALL       =  CC_HONOR_PARENT_TRANSFORM_TRANSLATE | CC_HONOR_PARENT_TRANSFORM_ROTATE | CC_HONOR_PARENT_TRANSFORM_SCALE,

} ccHonorParentTransform;

1 个答案:

答案 0 :(得分:2)

&LT;&LT; - 是一个班次的一点操作(我的母语是俄语,我按原样翻译 - 不确定它是否正确)。但是你不需要理解它在这种情况下是如何工作的,因为在这种情况下它只是一种填充枚举值的方法。

来自cocos2d文档

- (ccHonorParentTransform) honorParentTransform [read, write, assign] 是否根据其父变换进行变换。对健康酒吧有用。例如:即使父母旋转,也不要旋转健康栏。 重要:仅在使用CCSpriteBatchNode呈现时才有效。

您使用批量渲染吗?

修改

这条线很奇怪(它不会发出警告吗?)

 sprite2.CC_HONOR_PARENT_TRANSFORM_SCALE = false

你应该写

sprite2.honorParentTransform &= ~CC_HONOR_PARENT_TRANSFORM_SCALE;

PS:枚举是使用位操作创建的,因为它使您能够错误配置。例如,你可以写

sprite2.honorParentTransform &= ~(CC_HONOR_PARENT_TRANSFORM_SCALE | CC_HONOR_PARENT_TRANSFORM_ROTATE);

它将启用平移和旋转 所以honorParentTransform是一个位掩码,允许你配置它的配置 - 不仅使用一些预定义的值,而且还使用那些组合。

在这里,您可以编写有关按位运算的更多信息 http://www.cprogramming.com/tutorial/bitwise_operators.html

在我们的案例中发生的事情是这样的: 你有一个当前的掩码,例如01101111(真的是32位) 和CC_HONOR_PARENT_TRANSFORM_SCALE类似于00001000 - 它只有一个非零位。 ~ - 是反转:所以它将00010000转换为11101111,然后用你当前的掩码进行逐位加法 - 所以所有的位都将被保留,除了第四个!