cocos2d, CC_HONOR_PARENT_TRANSFORM_SCALE, как мне использовать это свойство enum? - PullRequest
1 голос
/ 19 января 2011

Я хочу добавить sprite2 к sprite1, масштабировать ширину sprite 1 без масштабирования sprite2.

Я нашел код ниже части API Cocos2d;CCSprite.h строка 54, но я не знаю, как ее использовать и что означает «1 << 2». </p>

В основном я делаю следующее, но это не работает:

[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 Ответ

2 голосов
/ 20 января 2011

<< - небольшая операция смены (мой родной язык русский, и я перевел как есть - не уверен, что это правильно). Но вам не обязательно понимать, как это работает в этой ситуации, потому что в этом случае это просто метод для заполнения значений перечисления. </p>

Из документации по cocos2d

- (ccHonorParentTransform) honorParentTransform [read, write, assign] следует ли преобразовывать в соответствии с его родительскими преобразованиями. Полезно для здоровья баров. Например: не вращайте панель здоровья, даже если родитель вращается. ВАЖНО : Действителен, только если он отображается с использованием CCSpriteBatchNode.

Используете ли вы пакетный рендеринг?

EDIT:

Эта строка очень странная (не предупреждает ли она?)

 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, а затем вы добавляете битовую комбинацию с вашей текущей маской - так что все биты будут сохранены, кроме четвертого!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...