变量在黑莓Cocos2d-x中失去价值

Variable losing its value in Cocos2d-x for Blackberry

本文关键字:失去 Cocos2d-x 变量      更新时间:2023-10-16

我在黑莓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的值。设置标签的宽度,然后打印出来。

希望锚点建议有所帮助。