如何将CCSprite的位置添加到CCParallaxNode?

时间:2013-08-09 22:21:57

标签: c++ cocos2d-iphone cocos2d-x parallax ccsprite

我有一个滚动无限的CCparallaxNodeExtras(遵循太空游戏教程)。我作为一个孩子添加了一个由其他CCSprite构成的CCSprite,如下所示:

_backgroundNode = CCParallaxNodeExtras::node();
this->addChild(_backgroundNode,-2);

    float acum = 0.0;
    back1 = CCSprite::create();
    for(int i = 0; i < num_repeats; ++i) {
        CCSprite *back = CCSprite::createWithSpriteFrameName("rock.png");
        back->setPosition(ccp(acum, 0));
        back1->addChild(back);
        acum+= back->getContentSize().width+150.0;
    }

    _backgroundNode->addChild(back1,  1 , ccp(0.1,0.1), ccp(0, winSize.height * 0.64));

现在在我的更新中我有这个:

CCPoint backgroundScrollVert = ccp(-1024, 0);
_backgroundNode->setPosition(ccpAdd(_backgroundNode->getPosition(), ccpMult(backgroundScrollVert, dt)));

完美,背景移动并消失(这就是我现在想要的)但我需要在该背景上的精灵和固定的精灵之间进行碰撞,作为主节点的子节点。

问题在于,每当我尝试通过简单的方式(与边界框相交)获得碰撞时它就不起作用,所以我试图获得精灵的位置,而我得到的只是固定的位置由精灵(后面)组成的CCSprite(back1)。

现在,是否有可能获得位于该视差节点中的任何单个精灵的位置?如果我尝试这样的话:

CCSprite *tempsprite = (CCSprite*)_backgroundNode->getChildren()->objectAtIndex(0);
printf("%f\n", tempsprite->getChildren()->objectAtIndex(0)->getPositionX());

它始终打印相同的值,就像位置不受后台节点中父级转换的影响...所以,我该如何正确地获取它?如何获得相对于屏幕而不是父母的位置?

2 个答案:

答案 0 :(得分:2)

使用convertToWorldSpace函数获取父级的位置。如果您的节点是嵌套的,那么您需要逐个查询。

    CGPoint pos1 = [back1 convertToWorldSpace: back.position];    
    CGPoint pos2 = [_backgroundNode convertToWorldSpace: pos1];

答案 1 :(得分:1)

我确实喜欢这个和它的工作。

float xPosition = _backgroundNode->convertToWorldSpace(sprite->getPosition()).x;

float widthSize = sprite->getContentSize().width;

float heightSize = sprite->getContentSize().height;