我在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不会居中。此问题仅在Blackberry上发生,但似乎“大小”已正确设置,因此我不知道这是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,则纹理的左下角与节点的位置对齐。如果anchorPoint为1x1,则纹理的右上角与节点的位置对齐。当涉及到左,右,顶部或底部对齐节点时,这使anchorPoint最受欢迎。它最常用于对齐文本标签或将屏幕元素与屏幕边框对齐。


您可以在此处http://www.koboldtouch.com/display/IDCAR/How+The+Anchor+Point+Works+And+What+To+Use+It+For了解更多关于anchorPoint的信息。

关于您的变量被重置为零,我想这些行可能存在一些问题。
std::stringstream stream; stream << "size is " << (size.width/2) << "and " (size.height/2); std::string outtext = stream.str();


  块引用


我更多是一名Java程序员,但我想应该有一种方法可以直接将vale of size.width添加到标签中并打印出来。

希望anchorPoint的建议有所帮助。

关于c++ - 变量在Blackberry的Cocos2d-x中失去其值(value),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15783433/

10-11 16:06