变量在黑莓Cocos2d-x中失去价值
Variable losing its value in Cocos2d-x for 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'的代码的右边,一切都很好。如果我把代码放到其他地方,或者完全去掉,'size'(大概)会回到0,jpeg不会居中。这个问题只发生在黑莓上,但似乎"大小"设置正确,所以我不知道这是cocos2d-x的错误。是否会有一些编译器搞砸了事情,或者只是一些非常简单的错误,我错过了,其他编译器更宽容?
为了进一步混淆,我有另一个应用程序,其中背景设置在一个名为initBackground的单独函数中,该函数从主init函数调用。在那个应用程序中,即使我手动将背景设置为屏幕中间,背景也会定位错误。高度是正确的,但如果我将x位置设置为160,它的行为就像我将其设置为0一样,只显示一半的图像。
我不介意深入研究cocos2d-x代码,但如果有任何关于从哪里开始寻找的提示,我将非常感激。
我知道这是一个旧的帖子,但我会尽量给出一些建议,以防其他人有类似的问题。从你的问题来看,我认为一个变量可能会打乱图像的定位,那就是锚点值。也许由于某种原因,您的锚点被设置为不同的值(0.5,0.5),这是您的图像的中心。
anchorPoint的取值范围为0.0 ~ 1.0(0% ~ 100%)。如果anchorPoint是0.5x0.5(带有纹理的节点的默认值),那么纹理将以节点的位置为中心。如果anchorPoint为0x0,则纹理的左下角与节点的位置对齐。如果锚点是1x1,则纹理的右上角与节点的位置对齐。这使得锚点在左、右、上或下对齐节点时最受欢迎。它最常用于对齐文本标签或对齐屏幕元素与屏幕边框。
您可以在这里了解更多关于anchorPoint的信息http://www.koboldtouch.com/display/IDCAR/How+The+Anchor+Point+Works+And+What+To+Use+It+For
关于你的变量被重置为零,我想这些行可能有一些问题。std::stringstream stream;
stream << "size is " << (size.width/2) << "and " (size.height/2);
std::string outtext = stream.str();
引用
我更像一个java程序员,但我想应该有一种方法可以直接添加size的值。设置标签的宽度,然后打印出来。
希望锚点建议有所帮助。
- 主.cpp:18:20:错误:从"int*"转换为"int"会失去精度 [-fa
- 启动类函数作为失去引用的线程
- 构造对象 c++ (cocos2d-x) 时的区别
- 为什么对引用的常量引用会失去其恒定性?
- 当指针在 cpp 17 中失去引用时,是否会调用非默认析构函数?
- 如何避免 Cocos2d-x 3.15.1 中的 MenuItemImage 和 MenuItemSprite 之间的冲突
- Cocos2D-X:从内存中读取 MP3 数据
- 如何在 cocos2d-x 3.17v 中创建字符串数组
- 使shared_ptr失去对内存的所有权
- 从"SymbolInfo*"转换为"YYSTYPE {aka int}"会失去精
- C++:从 "const variable*" 转换为"uint32"会失去精度
- 如何使用 cocos creator 在 Cocos2d-X/Cocos2d-JS 中调用 javascript 函数并
- 音乐和音效无法在win32平台上播放?(Cocos2D-X)
- Cocos2d-x TiledMap,在调用 getLayer() 获取碰撞层时返回一个 nullptr?
- 数组在返回时失去价值(库存/菜单程序)C++
- 为什么精灵在 cocos2d-x 中颤抖
- 在DLL中,C 静态矢量会失去元素
- 为什么我的std :: Map失去了价值
- 当在QTableView上丢失焦点时,失去背景颜色
- 变量在黑莓Cocos2d-x中失去价值