Blackberry Playbook で Cocos2d-x を使用しています。画面の中央にjpegを配置しようとしていますが、画面のサイズを取得するために使用する変数は、どういうわけか0になります。私のinit関数のコードは以下の通りです:
bool MyScene::init() {
if ( !CCLayer::init() ) {
return false;
}
CCSize size = CCDirector::sharedDirector()->getWinSize();
bg = CCSprite::create("2.jpg");
bg->setPosition(ccp( size.width/2 , size.height/2 ));
this->addChild(bg);
fg = CCSprite::create("hud2.png");
fg->setPosition(ccp( size.width/2 , 25 ));
this->addChild(fg);
fg2 = CCSprite::create("hud.png");
fg2->setPosition(ccp( size.width/2 , size.height - 30 ));
this->addChild(fg2);
std::stringstream stream;
stream << "size is " << (size.width/2) << "and " (size.height/2);
std::string outtext = stream.str();
label = CCLabelTTF::create(outtext.c_str(), "DejaVuSansMono.ttf", 25, CCSizeMake(size.width, 25), kCCTextAlignmentCenter);
label->setPosition(ccp( size.width/2 , 28 ));
this->addChild(label);
}
これを実行すると、サイズが 0 で、jpeg が中央ではなく左下隅にあるというラベルが印刷されます。ただし、jpeg の代わりに png をロードすると、すべて正常に動作します。さらに混乱させるために、文字列を「サイズ」の値で埋めるコードを「サイズ」を設定するコードのすぐ下に移動すると、すべて正常に動作します。そのコードを別の場所に配置するか、完全に削除すると、(おそらく) 'size' が 0 に戻り、jpeg が中央に配置されません。この問題は Blackberry でのみ発生しますが、'size' が正しく設定されているように見えるので、cocos2d-x のバグかどうかはわかりません。物事を台無しにするいくつかのコンパイラーの変なところ、または他のコンパイラーがより寛容であることを私が見逃している本当に単純なエラーがあるのでしょうか?
さらに混乱させるために、メインの init 関数から呼び出される initBackground と呼ばれる別の関数で背景が設定されている別のアプリがあります。そのアプリでは、手動で位置を画面の中央に設定しても、背景が正しく配置されません。高さは適切ですが、x 位置を 160 に設定すると、0 に設定した場合と同じように動作し、画像の半分しか表示されません。
cocos2d-x コードを掘り下げてもかまいませんが、どこから調べればよいかについてのヒントをいただければ幸いです。