Mengapa AnchorPoint tidak memengaruhi Positioning `CCLayer`?

8

Saya pikir ada perbedaan antara perilaku CCLayer dan CCNode ketika saya mengubah AnchorPoint mereka.

Saya akan menjelaskan apa yang saya maksud dan tolong seseorang menjelaskannya.

Skenario: Saya mulai denganCCNode

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)

Selain Pemosisian , semua tindakan (seperti Rotating, Scaling ) didasarkan pada titik jangkar ini.

Kebijakan ini cukup adil dan Anda tidak akan bingung ketika memindahkan node yang diskalakan ( setScale(X)) ke beberapa posisi karena posisi node (dan bukan konten node! ) Tidak akan berubah di layar setelah tindakan apa pun.

( PS: Kami tahu bahwa memutar / menskalakan suatu simpul akan memutar / menskalakan isi simpul internal)

Mari kita lanjutkan dengan 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).

Meskipun CCLayer juga menggunakan titik jangkar untuk tujuan penskalaan, rotasi, dan ..., JANGAN menggunakan titik jangkar untuk memposisikan !!!

Pertanyaan >>>> MENGAPA? dan Bagaimana saya bisa memiliki setPosition()perilaku yang sama seperti CCNode CCLayer?


PS: Saya juga sudah mencoba ->ignoreAnchorPointForPosition(true)tetapi tidak membantu.

(@ cocos2d-x versi 2.2.3)

Emadpres
sumber

Jawaban:

0

Anda mengatakan Anda telah mencoba pengaturan `abaikanAnchorPointForPosition (true), tetapi apakah Anda sudah mencoba mengaturnya menjadi false?

Metode init CCLayer memanggil ignoreAnchorPointForPosition(true), yang pada dasarnya memberitahu coco untuk mengabaikan anchor point untuk penentuan posisi. Anda dapat mengaturnya ke false dan harus menghormati titik jangkar untuk posisi.

aramuss
sumber