本文整理汇总了C++中AStarNode::setPPos方法的典型用法代码示例。如果您正苦于以下问题:C++ AStarNode::setPPos方法的具体用法?C++ AStarNode::setPPos怎么用?C++ AStarNode::setPPos使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AStarNode
的用法示例。
在下文中一共展示了AStarNode::setPPos方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Astar
void TileMapScene::Astar(Point S,Point E)
{
std::set<AStarNode> open;
std::set<AStarNode> close;
AStarNode start;
AStarNode end;
AStarNode t;
AStarNode cur;
int sx = S.x;
int sy = S.y;
int ex = E.x;
int ey = E.y;
start.setPos(sx,sy);
start.setG(0);
start.setH(abs(sx-ex)+abs(sy-ey));
start.setF(start.g+start.h);
start.setPPos(sx,sy);
end.setPos(ex,ey);
open.insert(start);
int a[] = {-1, 0, 1, 0, -1,-1, 1, 1};
int b[] = { 0, 1, 0,-1, -1, 1,-1, 1};
while(!open.empty())
{
cur = top(open);
close.insert(cur);
open.erase(cur);
if(cur == end)
{
break;
}
CCLOG ("OPENSIZE:%d\n", open.size());
CCLOG ("CLOSESIZE:%d\n", close.size());
for(int i = 0; i < 8; ++i)
{
if(cur.x + a[i] >= 0 && cur.x +a[i]<=39 && cur.y + b[i] >= 0 && cur.y +b[i]<=39)
{
t.setPos(cur.x + a[i], cur.y + b[i]);
if(i<=3)t.setG(cur.g+1);
else t.setG(cur.g+1.4);
t.setH(abs(end.x-t.x)+abs(end.y-t.y));
t.setF(t.g+t.h);
t.setPPos(cur.x,cur.y);
auto oft = open.find(t);
int block = meta->getTileGIDAt(Vec2(t.x,t.y));
if(close.find(t)!=close.end()||block)
continue;
if(oft==open.end())
{
open.insert(t);
}
else if(oft->f>t.f)
{
open.erase(*oft);
open.insert(t);
}
}
}
}
auto test = close;
//cur = end;
while(!(cur==start))
{
vec.push_back(cur);
cur.setPos(cur.px,cur.py);
cur = *close.find(cur);
}
count = vec.size()-1;
}