Reputation: 666
I have a CCparallaxNodeExtras that scrolls infinite (following the space game tutorial). I added as a child a CCSprite made of other CCSprite, like this:
_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));
now in my update I have this:
CCPoint backgroundScrollVert = ccp(-1024, 0);
_backgroundNode->setPosition(ccpAdd(_backgroundNode->getPosition(), ccpMult(backgroundScrollVert, dt)));
perfect, the background moves and disappears (that is what I want for now) but I need to get the collision between the sprites on that background and a fixed sprite as a child of the main node.
The problem is that whenever I try to get the collision by the simple way (intersecting the bounding boxes) it doesn't work, so I tried to just get the position of the sprites and all I get is the position fixed in the CCSprite (back1) composed by the sprites (back).
Now, is there a possible way to get the position of any individual sprite located in that parallax node? If i try something like:
CCSprite *tempsprite = (CCSprite*)_backgroundNode->getChildren()->objectAtIndex(0);
printf("%f\n", tempsprite->getChildren()->objectAtIndex(0)->getPositionX());
it prints always the same value, it is like the position is not being affected by the transformation of the parent in the background node... so, how do I get it correctly? how do I get the position relative to screen and not to the parent?
Upvotes: 2
Views: 1032
Reputation: 39
I did like this and its working.
float xPosition = _backgroundNode->convertToWorldSpace(sprite->getPosition()).x;
float widthSize = sprite->getContentSize().width;
float heightSize = sprite->getContentSize().height;
Upvotes: 1
Reputation: 22042
Use convertToWorldSpace function to get position in parent. If your nodes are nested then you need to query one by one.
CGPoint pos1 = [back1 convertToWorldSpace: back.position];
CGPoint pos2 = [_backgroundNode convertToWorldSpace: pos1];
Upvotes: 2