C++ Blackberry的Cocos2d-x中的变量值丢失
我在黑莓Playbook上使用Cocos2d-x。我试图在屏幕上居中放置一个jpeg,但我用来获取屏幕大小的变量不知何故最终为0。即使我可以在加载和定位jpeg之前确认它不是零。my init函数中的代码如下:C++ Blackberry的Cocos2d-x中的变量值丢失,c++,cocos2d-x,C++,Cocos2d X,我在黑莓Playbook上使用Cocos2d-x。我试图在屏幕上居中放置一个jpeg,但我用来获取屏幕大小的变量不知何故最终为0。即使我可以在加载和定位jpeg之前确认它不是零。my init函数中的代码如下: bool MyScene::init() { if ( !CCLayer::init() ) { return false; } CCSize size = CCDirector::sharedDirector()->getWinSize
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代码,但如果您能提供任何关于从何处开始查找的提示,我将不胜感激 我意识到这是一篇老文章,但我会尝试给出一些建议,以防其他人有类似的问题。从你的问题来看,我想一个可能会影响图像定位的变量是主播点值。也许出于某种原因,您的“anchorpoint”设置为不同的值,即图像的中心0.5,0.5 锚点的值范围为0.0到1.0%到100%。如果具有纹理的节点的默认锚点为0.5x0.5,则纹理位于节点位置的中心。如果锚点为0x0,则纹理的左下角将与节点的位置对齐。如果锚点为1x1,则纹理的右上角将与节点的位置对齐。这使得anchorPoint在涉及到左对齐、右对齐、上对齐或下对齐节点时最受欢迎。它最常用于对齐文本标签或将屏幕元素与屏幕边框对齐 你可以在这里了解更多关于主播的信息 关于变量被重置为零,我想这些行可能会有一些问题。。 std::stringstream; 流动