2017-03-14 1 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"); } 

これはif文が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 
    } 
    } 
} 

を、決してPositionを比較するoperator==を使用し、座標間の差がより少ないであれば、常にテスト:あなたは例えば、どこかのロジックの情報を保持していないする必要がありますする必要が何をすべきか

指定量。

関連する問題