我有一个滚动无限的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());
它始终打印相同的值,就像位置不受后台节点中父级转换的影响...所以,我该如何正确地获取它?如何获得相对于屏幕而不是父母的位置?
答案 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;