Warum hat der AnchorPoint keinen Einfluss auf die CCLayer-Positionierung?


8

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)

Antworten:


0

Sie sagen, Sie haben versucht, `ignoreAnchorPointForPosition (true) zu setzen, aber Sie haben versucht, es auf false zu setzen?

CCLayer-Init-Methodenaufrufe ignoreAnchorPointForPosition(true), die Cocos grundsätzlich anweisen , den Ankerpunkt für die Positionierung zu ignorieren. Sie können es auf false setzen und es sollte den Ankerpunkt für die Position berücksichtigen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.