2012年5月22日火曜日

cocos2d-xのHeloo Worldの表示の違いについて考えてみた

先日、Twitterやcocos2dのグループに投稿しましたらページビューが一気に上がりまして小躍りしていました。
こんなに行くとは思いもよらなかったので、SNSの威力を身に染みて感じました。

さて、タイトルの件ですがこっそりと会社のSC-04D(Galaxy Nexus)に入れてみますと、下記のように表示されました。
fpsがT-01Cの2倍です
また、T-01C(REGZA phone)ではこのように表示されます。
残念なfpsを叩き出すT-01C

上下に並べるとわかりやすいですが、文字と画像の表示サイズが異なります。
読み込んでいるaplファイルは同一の物を使用しています。

では、何故このようなことが起きるのかを見ていきたいと思います。
まず、Hello Worldと記載されているラベルの部分はこのように書かれていました。
CCLabelTTF* pLabel = CCLabelTTF::labelWithString("Hello World", "Arial", 24);
// ask director the window size
CCSize size = CCDirector::sharedDirector()->getWinSize();
// position the label on the center of the screen
pLabel->setPosition( ccp(size.width / 2, size.height - 50) );

次に、中央に表示されている画像はこのように書かれていました。
CCSprite* pSprite = CCSprite::spriteWithFile("HelloWorld.png");
// position the sprite on the center of the screen
pSprite->setPosition( ccp(size.width/2, size.height/2) );

Androidで考慮するべきdpiの概念が全くされていないですね…。
位置に関してはセンタリングのみですので、この書き方でいいでしょうが、サイズに関しましてはdpiのことを考慮に入れるべきなのではないかと思いました。
実際、T-01CとSC-04Dとでは見た目の大きさが異なっていますので、このままゲームを作っていきますと端末毎にゲームの表示される大きさが異なるようになっていって寂しいことになっていきそうです。
というかよろしくないです。

2Dゲームならアスペクト比が一定になるように描画をしていくようにして作成していく方が作りやすそうではあります。
ただし、使われない画面スペースも出てきますので、その辺りの塩梅をどのようにするかは考え中です。

うーん、Android対応は難しいですね。
ぐぬぬ。

【追記】
dpiの値に関してですが、

  • T-01C=1.5
  • SC-04D=2
だったと思います。
hdpiとxhdpiの差が生まれていますね…。
そういえば、解像度に合わせての画像の種類はどう切り分けるのでしょうかね?
Resourcesフォルダを見ても切り替えられるようにディレクトリが振り分けられていないです。
これはもしかして、コード側で切り替えになるんでしょうかね?
もう少しこの辺りは追っていきます。

1 件のコメント:

  1. このコメントは投稿者によって削除されました。

    返信削除