2017-03-14 25 views
0

我用DrawNode函數繪製了一個圓。 然後我檢查,看看用戶是否點擊圓或不如何獲取由DrawNode函數創建的節點的位置?

在這裏,我創建圈子

DrawNode *drawnode = DrawNode::create(); 
drawnode->drawDot(ccp(10, Director::sharedDirector()->getVisibleSize().height/5), 10, Color4F(2, 99, 2, 2)); 
drawnode->setPosition(Point(winSize.width/2.1 + origin.x, winSize.height/5 + origin.y)); 
this->addChild(drawnode); 

這裏是我檢查,如果用戶點擊圈

if(Level::drawnode->getPosition() == touch->getLocation()) { CCLOG("Circle has been clicked"); } else { CCLOG("Circle has not been clicked"); } 

問題是如果語句繼續去else語句。

如何獲取屏幕上的圓圈位置,使點擊正確的圈時

回答

0

一個DrawNode不提供這樣的功能。它基本上是一個簡單的節點,它可以在不知道所包含的形狀的情況下繪製形狀。這只是一個圖形節點,它將所有繪製圖元排入隊列。

做你需要做什麼,你需要保持你的邏輯信息的地方,如:

struct Circle 
{ 
    Position position; 
    float radius; 

    bool isInside(const Position& location) { 
    // return distance beween location and position < radius 
    } 
} 

std::vector<Circle> circles; 

// do it the when circles vector changes 
void rebuildDrawNode() 
{ 
    drawNode.clear(); 
    for (const Circle& circle : circles) { 
    drawNode->drawDot(...) 
} 

void checkIfTouches(const Position& position) { 
    for (const Circle& circle : circles) { 
    if (circle.isInside(position)) { 
     // do what you need 
    } 
    } 
} 

作爲附帶節點,千萬不要用operator==比較Position,總是測試,如果座標之間的差值小於較小一定數量。

相關問題