以下の本の「レシピ38」を参考にモーダルレイヤを作成しました。
画面の真ん中にドンとモーダルレイヤが表示される…はずだったのですが、僕の書いたコードでは上にずれて表示されてしまいました。
原因はCCLayerをいくつか階層化していたために、画面の左下とレイヤの原点がずれてしまっていたためです。
Cocos2d-xでは位置を親との相対座標で指定するようです。
これによって、階層の途中に位置が(0, 0)でないレイヤがあると、モーダルレイヤの位置を(0, 0)にしていたとしてもずれて表示されてしまいます。
少し調べただけでは、そのようなときに使う特別なメソッドはわかりませんでした。
それならばと、親階層をたどって左下の座標を計算するコードを書きました。
float x = 0;
float y = 0;
CCNode *node = modal->getParent();
while (node) {
x -= node->getPositionX();
y -= node->getPositionY();
node = node->getParent();
}
modal->setPosition(ccp(x, y));
とりあえずこれで画面の中心に表示できるようになりました。
タグ:cocos2d-x