2013-08-09 2 views
2

나는 우주 왕복선 튜토리얼을 따라 무한히 스크롤하는 CCparallaxNodeExtras를 가지고있다. 나는이를 내 업데이트에 지금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)); 

: 나는 아이로이 같은 다른 CCSprite 만든 CCSprite를 추가

CCPoint backgroundScrollVert = ccp(-1024, 0); 
_backgroundNode->setPosition(ccpAdd(_backgroundNode->getPosition(), ccpMult(backgroundScrollVert, dt))); 

완벽한, 배경 이동과 사라 (즉 내가 원하는 것입니다 지금은)하지만 그 배경에있는 스프라이트와 메인 노드의 자식으로 고정 된 스프라이트 사이에 충돌을 가져와야합니다.

문제는 (테두리 상자를 교차하는) 간단한 방법으로 충돌을 시도 할 때마다 작동하지 않으므로 스프라이트의 위치를 ​​얻으려고 했으므로 고정 된 위치입니다. 스프라이트 (back)로 구성된 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;