如何将CCSprite的位置添加到CCParallaxNode

How to get position of CCSprite added to CCParallaxNode?

本文关键字:添加 CCParallaxNode 位置 CCSprite      更新时间:2023-10-16

我有一个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)));

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

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

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

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

它总是打印相同的值,就像位置不受后台节点中父节点变换的影响。。。那么,我该如何正确地得到它呢?如何获得相对于屏幕而不是相对于父屏幕的位置?

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

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

我确实喜欢这个,而且它很管用。

float xPosition = _backgroundNode->convertToWorldSpace(sprite->getPosition()).x;
float widthSize = sprite->getContentSize().width;
float heightSize = sprite->getContentSize().height;