Eu acho que há uma diferença entre o comportamento do CCLayer e do CCNode quando eu mudo o AnchorPoint.
Descreverei o que quero dizer e, por favor, alguém o explique.
Cenário:
eu começo comCCNode
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)
Além do Posicionamento , todas as ações (como Rotação, Escalonamento ) são baseadas neste ponto de ancoragem.
Essa política é justa o suficiente e você não ficará confuso ao mover um nó escalado ( setScale(X)
) para alguma posição, porque a posição do nó (e não o conteúdo do nó! ) Não será alterada na tela após nenhuma ação.
( PS: sabíamos que girar / escalar um nó girará / escalará o conteúdo interno do nó)
Vamos continuar com 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).
Embora o CCLayer também use o ponto de ancoragem para fins de escala, rotação e ..., NÃO usa seu ponto de ancoragem para posicionamento !!!
Pergunta >>>> POR QUE? e Como posso ter o mesmo setPosition()
comportamento semelhante ao CCNode CCLayer
?
PS: Eu também tentei, ->ignoreAnchorPointForPosition(true)
mas não ajudou.
(@ versão cocos2d-x é 2.2.3)
fonte