2013-08-09 2 views
2

У меня есть CCparallaxNodeExtras, который прокручивает бесконечные (после учебника по космической игре). Я добавил, как ребенку CCSprite сделанный из другого CCSprite, как это:Как получить позицию CCSprite, добавленную в CCParallaxNode?

_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

Используйте функцию convertToWorldSpace, чтобы получить позицию в родительском. Если ваши узлы вложены, вам нужно запросить один за другим.

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

Я перевел это на cocos2d-x и работал почти хорошо, мне также пришлось добавить положение фона – nosmirck

1

Мне понравилось это и его работа.

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

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

float heightSize = sprite->getContentSize().height; 
Смежные вопросы