获取角度 和 绘制函数

1
void drawDottedLine(DrawNode* myDrawNode, Vec2& origin, Vec2& destination, const Color3B& color);

实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
void HelloWorld::drawDottedLine(DrawNode* myDrawNode, Vec2& origin, Vec2& destination, const Color3B& color)
{
int _distance = origin.getDistance(destination);
int cnt = _distance / 15;

auto _listView = ListView::create();
//_listView->setAnchorPoint(Vec2(0, 0));

/*_listView->setBackGroundColorType(Layout::BackGroundColorType::SOLID);
_listView->setBackGroundColor(Color3B::WHITE);*/
// set list view ex direction
_listView->setDirection(ui::ScrollView::Direction::HORIZONTAL);
_listView->setBounceEnabled(false);
_listView->setTouchEnabled(false);
_listView->setContentSize(Size(_distance, 8));
_listView->setInnerContainerSize(Size(_distance, 8));
_listView->setGravity(ListView::Gravity::CENTER_VERTICAL);
_listView->setItemsMargin(5);
_listView->setPosition(origin);

Vec2 dis = destination - origin;
float angle = Vec2(dis.y, dis.x).getAngle() / 3.14f * 180;
_listView->setRotation(angle + 270);

this->addChild(_listView);

for (size_t i = 0; i < cnt; i++)
{
auto layout = Layout::create();
layout->setContentSize(Vec2(15, 8));
layout->setBackGroundColorType(Layout::BackGroundColorType::SOLID);
layout->setBackGroundColor(color);
_listView->addChild(layout);
}
}

绘制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Color3B const green = Color3B(145, 214, 60);
Color3B const gray = Color3B(30, 21, 16);
std::vector<Vec2> pos;
pos.push_back(Vec2(309, 169));
pos.push_back(Vec2(264, 84));
pos.push_back(Vec2(136, 48));
pos.push_back(Vec2(103, 137));
pos.push_back(Vec2(93, 237));
pos.push_back(Vec2(207, 290));
pos.push_back(Vec2(131, 345));

size_t size = pos.size();
// pass 2
int const playPos = 3;

auto mydrawNode = DrawNode::create();
mydrawNode->setPosition(Vec2(0, 0));
addChild(mydrawNode);
mydrawNode->setLineWidth(8);

for (size_t i = 0; i < size; i++)
{
auto layout = Layout::create();
layout->setContentSize(Vec2(10, 10));
layout->setBackGroundColorType(Layout::BackGroundColorType::SOLID);
layout->setBackGroundColor(Color3B::RED);
layout->setPosition(pos.at(i));
this->addChild(layout);

if (i == size - 1)
{
break;
}

// green
if (playPos - 1 >= i)
{
drawDottedLine(mydrawNode, pos.at(i), pos.at(i + 1), green);
continue;
}
// gray
drawDottedLine(mydrawNode, pos.at(i), pos.at(i + 1), gray);

}

示意图

示意图

下载Demo

点此下载