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