¿Por qué AnchorPoint no afecta el posicionamiento `CCLayer`?

8

Creo que hay una diferencia entre el comportamiento de CCLayer y CCNode cuando cambio su AnchorPoint.

Describiré lo que quiero decir y, por favor, que alguien lo explique.

Escenario: comienzo conCCNode

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)

Además del Posicionamiento , todas las acciones (como Rotar, Escalar ) se basan en este punto de anclaje.

Esta política es lo suficientemente justa y no se confundirá al mover un nodo escalado ( setScale(X)) a alguna posición porque la posición del nodo (¡y no el contenido del nodo! ) No cambiará en la pantalla después de cualquier acción.

( PD: Sabíamos que girar / escalar un nodo rotará / escalará el contenido del nodo interno)

Continuemos con 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).

Aunque CCLayer también usa el punto de anclaje para escalar, rotar y ... propósitos, ¡NO usa su punto de anclaje para posicionamiento!

Pregunta >>>> ¿POR QUÉ? y ¿Cómo puedo tener el mismo setPosition()comportamiento similar a CCNode CCLayer?


PD: También lo intenté ->ignoreAnchorPointForPosition(true)pero no ayudó.

(La versión @ cocos2d-x es 2.2.3)

Emadpres
fuente

Respuestas:

0

Usted dice que ha intentado configurar `ignoreAnchorPointForPosition (true), pero ¿ha intentado configurarlo en falso?

Llamadas al método init CCLayer ignoreAnchorPointForPosition(true), que básicamente le dice a los cocos que ignoren el punto de anclaje para el posicionamiento. Puede establecerlo en falso y debe respetar el punto de anclaje para la posición.

aramusss
fuente