我想向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;
答案 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
,然后用你当前的掩码进行逐位加法 - 所以所有的位都将被保留,除了第四个!