cocos2d-x の NO_BORDER で天地中央
諸事情により cocos2d-x に手を出して、ここ2、3日で C++ をほぼ初めて書き始めている。
C++ 難しい話はともかく、 cocos の座標系がやばいので覚書。
端末ごとの画面サイズ(というよりもアスペクト比)の差異を吸収する方法のひとつに ResolutionPolicy::NO_BORDER
というのが用意されている。比率は保持して縦横どちらかにはみ出すやつ(css の background-size
でいうところの cover
的な?)
この状態で画面の中央に配置するのにちょっとハマった。
Size size = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); // layer->setPosition(size/2); // では期待した挙動をしない(上下にはみ出す画面サイズの端末だと、下寄りになる) Vec2 center = Vec2(size.width/2+origin.x, size.height/2+origin.y); layer->setPosition(Vec2(center.x-layerSize/2, center.y-layerSize/2))
早速ブレークポイントを使った。
Visible
という名前からもう少し察したかったと言えば、それもそう。
この問題に関連したりしなかったりして ignoreAnchorPointForPosition
とかいうのもあるけど、これはもっとややこしくてまだ完全に理解できていない…
いっそ生 OpenGL のほうが座標系はそこそこ理解しているつもりなので書きやすそうである(感想)
これ系のネタでまた書くかも。