Я думаю, что есть разница между поведением CCLayer и CCNode, когда я меняю их AnchorPoint.
Я опишу, что я имею в виду, и, пожалуйста, кто-нибудь объяснит.
Сценарий:
я начинаю сCCNode
CCNode *node = ...;
node.setContentSize(ccp(W,H));
// 1.
node.setAnchorPoint(ccp(0,0));
node.setPosition(ccp(X,Y); // This line will move the node in a way that its (0,0)-point will be placed at (X,Y).
// 2.
node.setAnchorPoint(ccp(1,1));
node.setPosition(ccp(X,Y); // This line will move the node in a way that its (0,0)-point will be placeed at (X-W,Y-H).
//In other word, this line will move the (W,H)-point of the node to (X,Y)
Кроме позиционирование , все действия (например , поворот, масштабирование ) основаны на этой точке привязки.
Эта политика достаточно справедлива, и вы не запутаетесь при перемещении масштабированного узла ( setScale(X)
) в какую-либо позицию, потому что позиция узла (а не содержимое узла! ) Не изменится на экране после каких-либо действий.
( PS: мы знали, что вращение / масштабирование узла будет вращать / масштабировать содержимое внутреннего узла)
Давайте продолжим с CCLayer
:
CCLayer *layer= ...;
layer.setContentSize(ccp(W,H));
// 1.
layer.setAnchorPoint(ccp(0,0));
layer.setPosition(ccp(X,Y); // This line will move the layer in a way that its (0,0)-point will be placed at (X,Y)
// 2.
layer.setAnchorPoint(ccp(1,1));
layer.setPosition(ccp(X,Y); // Unfortunately, This line will move the layer in a way that its (0,0)-point will be placeed at (X,Y).
Хотя CCLayer также использует опорную точку для масштабирования, вращения и ... целей, он НЕ использует свою опорную точку для позиционирования !!!
Вопрос >>>> ПОЧЕМУ? и Как я могу иметь такое же setPosition()
поведение, подобное CCNode CCLayer
?
PS: я тоже пробовал, ->ignoreAnchorPointForPosition(true)
но это не помогло.
(@ cocos2d-x версия 2.2.3)
источник