2

我有一个无限滚动的 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) 由 sprites (back) 组成。

现在,有没有一种可能的方法来获取位于该视差节点中的任何单个精灵的位置?如果我尝试类似:

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

它总是打印相同的值,就像位置不受背景节点中父级转换的影响......那么,我该如何正确获得它?如何获得相对于屏幕而不是父级的位置?

4

2 回答 2

2

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

    CGPoint pos1 = [back1 convertToWorldSpace: back.position];    
    CGPoint pos2 = [_backgroundNode convertToWorldSpace: pos1];
于 2013-08-10T02:51:29.857 回答
1

我确实喜欢这个及其工作。

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

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

float heightSize = sprite->getContentSize().height;
于 2013-11-22T10:46:48.000 回答