簡體   English   中英

如何獲取添加到CCParallaxNode的CCSprite的位置?

[英]How to get position of CCSprite added to CCParallaxNode?

我有一個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)由精靈(back)組成。

現在,有沒有一種方法可以獲取位於該視差節點中的任何單個子畫面的位置? 如果我嘗試類似的東西:

CCSprite *tempsprite = (CCSprite*)_backgroundNode->getChildren()->objectAtIndex(0);
printf("%f\n", 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM