Cocos2d-x でsetScaleとsetContentSizeの挙動の違い

すぐ忘れるのでメモ代わりにまとています。

Cocos2d-xで、Spriteに対してサイズ変更するときに、setContentSize(), setScale()各々を実行した時の挙動の違いは以下の通りで。

まず、100x100pxの大きさの画像を読み込む。

Sprite* sp = Sprite::create("100x100.png");

setContentSize()で2倍の大きさを指定する。

この時はSizeは指定した通りの値になって拡大率1倍

sp->setContentSize(sp->getContentSize() * 2);

Size size = sp->getContentSize();
CCLOG("(%f, %f) * %f", size.width, size.height, sp->getScale());

// > (200.000000, 200.000000) * 1.000000

Size size = node->getBoundingBox().size;
CCLOG("(%f, %f)", size.width, size.height);

// > (200.000000, 200.000000)

画像は2倍の大きさで表示されて、getScaleは当然、1

次に、setScale()で2倍の大きさを指定

以下の場合、Sizeは元のままで拡大率が2倍というデータ管理になってるみたい

sp->setScale(2.0f);

Size size = sp->getContentSize();
CCLOG("(%f, %f) * %f", size.width, size.height, sp->getScale());

// > (100.000000, 100.000000) * 2.000000

Size size = node->getBoundingBox().size;
CCLOG("(%f, %f)", size.width, size.height);

// > (200.000000, 200.000000)

いずれの場合も、getBoundingBox()は見かけ上の大きさで取得できる