2017-03-14 1 views
0

Ich habe einen Kreis mit der DrawNode-Funktion gezeichnet. Dann bin Überprüfung ich zu sehen, ob der Benutzer den Kreis klickt oder nichtWie bekomme ich die Position eines Knotens aus der DrawNode-Funktion?

Hier Ich schaffe den Kreis

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); 

Hier ist, wo ich bin Überprüfung, ob der Benutzer den Kreis

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

Das Problem ist, wenn die Anweisung weiter zur else-Anweisung geht.

Wie erhalte ich die Kreise Position auf dem Bildschirm, so dass, wenn der Kreis richtig geklickt wird

Antwort

0

A DrawNode nicht eine solche Funktionalität bietet. Es ist im Grunde ein einfacher Knoten, der Formen zeichnet, ohne dass man die enthaltenen Formen kennt. Es ist nur ein grafischer Knoten, der alle Zeichengrundelemente in die Warteschlange einreiht.

zu tun, was Sie tun müssen Sie Ihre Logik Informationen irgendwo halten müssen, zB:

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 
    } 
    } 
} 

Als Nebenknoten, nie operator== verwenden Position zu vergleichen, immer testen, ob Differenz zwischen den Koordinaten geringer ist als ein bestimmter Betrag

Verwandte Themen