Ich denke, es gibt einen Unterschied zwischen dem CCLayer- und dem CCNode-Verhalten, wenn ich ihren AnchorPoint ändere.
Ich werde beschreiben, was ich meine und bitte jemand erklären.
Szenario:
Ich beginne mitCCNode
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)
Zusätzlich zur Positionierung basieren alle Aktionen (wie Drehen, Skalieren ) auf diesem Ankerpunkt.
Diese Richtlinie ist fair genug und Sie werden nicht verwirrt, wenn Sie einen skalierten Knoten ( setScale(X)
) an eine Position verschieben, da sich die Position des Knotens (und nicht der Inhalt des Knotens! ) Nach Aktionen auf dem Bildschirm nicht ändert.
( PS: Wir wussten, dass durch Drehen / Skalieren eines Knotens der interne Knoteninhalt gedreht / skaliert wird.)
Fahren wir fort mit 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).
Obwohl CCLayer den Ankerpunkt auch zum Skalieren, Drehen und ... verwendet, verwendet es seinen Ankerpunkt NICHT zum Positionieren !!!
Frage >>>> WARUM ? und Wie kann ich das gleiche CCNode-ähnliche setPosition()
Verhalten für haben CCLayer
?
PS: Ich habe es auch versucht, ->ignoreAnchorPointForPosition(true)
aber es hat nicht geholfen.
(@ cocos2d-x Version ist 2.2.3)
quelle