我在 Blackberry Playbook 上使用 Cocos2d-x。我试图将 jpeg 在屏幕上居中,但我用来获取屏幕大小的变量最终为 0。即使我可以在 jpeg 加载和定位之前确认它是非零的。我的 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 在左下角而不是在中间居中。但是,如果我加载 png 而不是 jpeg,一切正常。更让我感到困惑的是,如果我将使用“size”值填充字符串的代码移动到设置“size”的代码下方,一切正常。如果我将该代码放在其他任何地方,或者将其完全取出,“大小”(大概)会回到 0 并且 jpeg 不会居中。这个问题只发生在黑莓上,但似乎“大小”设置正确,所以我不知道这是一个 cocos2d-x 错误。会不会有一些编译器的古怪把事情搞砸了,或者只是我错过了其他编译器更宽容的一些非常简单的错误?
为了进一步混淆,我有另一个应用程序,其中背景设置在一个名为 initBackground 的单独函数中,该函数从主 init 函数调用。在该应用程序中,即使我手动将位置设置为屏幕中间,背景也会定位错误。高度是正确的,但是如果我将 x 位置设置为 160,它的行为就好像我将其设置为 0 并且只显示了一半的图像。
我不介意深入研究 cocos2d-x 代码,但是任何关于从哪里开始寻找的提示都将不胜感激。