Je pense qu'il y a une différence entre le comportement CCLayer et CCNode lorsque je change leur AnchorPoint.
Je vais décrire ce que je veux dire et s'il vous plaît quelqu'un l'expliquer.
Scénario:
je commence parCCNode
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)
En plus du positionnement , toutes les actions (comme la rotation, la mise à l'échelle ) sont basées sur ce point d'ancrage.
Cette politique est assez juste et vous ne serez pas confus lorsque vous déplacez un nœud mis à l'échelle ( setScale(X)
) vers une position car la position du nœud (et non le contenu du nœud! ) Ne changera pas à l'écran après toute action.
( PS: nous savions que la rotation / la mise à l'échelle d'un nœud entraînerait la rotation / la mise à l'échelle du contenu du nœud interne)
Continuons avec 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).
Bien que CCLayer utilise également le point d'ancrage à des fins de mise à l'échelle, de rotation et ..., il n'utilise PAS son point d'ancrage pour le positionnement !!!
Question >>>> POURQUOI? et comment puis-je avoir le même setPosition()
comportement de type CCNode CCLayer
?
PS: J'ai aussi essayé ->ignoreAnchorPointForPosition(true)
mais ça n'a pas aidé.
(La version @ cocos2d-x est 2.2.3)
la source