如何获取由DrawNode函数构成的节点的位置?

时间:2017-03-14 18:14:05

标签: c++ cocos2d-x

我使用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语句。

如何在屏幕上显示圆圈位置,以便正确点击圆圈

1 个答案:

答案 0 :(得分: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,请始终测试坐标之间的差异是否小于指定数量。