Pourquoi l'AnchorPoint n'affecte pas le positionnement de `CCLayer`?


8

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)

Réponses:


0

Vous dites que vous avez essayé de définir `ignoreAnchorPointForPosition (true), mais avez-vous essayé de le définir sur false?

Appels de méthode d'initialisation CCLayer ignoreAnchorPointForPosition(true), qui indiquent essentiellement aux cocos d'ignorer le point d'ancrage pour le positionnement. Vous pouvez le définir sur false et il doit respecter le point d'ancrage pour la position.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.