Perché AnchorPoint non influisce sul posizionamento `CCLayer`?


8

Penso che ci sia una differenza tra il comportamento CCLayer e CCNode quando cambio il loro AnchorPoint.

Descriverò cosa intendo e per favore qualcuno lo spiegherà.

Scenario: inizio 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)

Oltre al posizionamento , tutte le azioni (come Rotazione, Ridimensionamento ) si basano su questo punto di ancoraggio.

Questa politica è abbastanza corretta e non ti confonderai quando sposti un nodo ridimensionato ( setScale(X)) in una posizione perché la posizione del nodo (e non il contenuto del nodo! ) Non cambierà nella schermata dopo alcuna azione.

( PS: sapevamo che ruotando / ridimensionando un nodo ruoterai / ridimensionerai il contenuto del nodo interno)

Continuiamo 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).

Sebbene CCLayer utilizzi anche il punto di ancoraggio per scopi di ridimensionamento, rotazione e ..., NON utilizza il suo punto di ancoraggio per il posizionamento !!!

Domanda >>>> PERCHÉ? e come posso avere lo stesso setPosition()comportamento simile a CCNode per CCLayer?


PS: ho anche provato, ->ignoreAnchorPointForPosition(true)ma non ha aiutato.

(La versione @ cocos2d-x è 2.2.3)

Risposte:


0

Dici di aver provato a impostare `ignoreAnchorPointForPosition (true), ma hai provato a impostarlo su false?

Il metodo init CCLayer chiama ignoreAnchorPointForPosition(true), che sostanzialmente dice al cocos di ignorare il punto di ancoraggio per il posizionamento. Puoi impostarlo su false e dovrebbe rispettare il punto di ancoraggio per la posizione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.