学习cocos2d-x没事想做做塔防游戏,却没有美工,也还没去找素材,就先这手头的素材做了个最初模样。
做了最初的闪躲障碍物功能,截图如下:
算法参照A星算法改编,但其中还有不少问题,如还是存在绕弯路,绕远路等缺陷:
代码如判断哪个方向可以走代码:
//右
if (!isObjs(ccp(p.x+1,p.y))&&!isNoRoute(ccp(p.x+1,p.y)))
{
route=new Route;
route->x=p.x+1;
route->y=p.y;
i++;
Route1->addObject(route);
flag=false;
}
//上
if (!isObjs(ccp(p.x,p.y+1))&&!isNoRoute(ccp(p.x,p.y+1)))
{
route=new Route;
route->x=p.x;
route->y=p.y+1;
flag=false;
i++;
Route1->addObject(route);
}
//下
if (!isObjs(ccp(p.x,p.y-1))&&!isNoRoute(ccp(p.x,p.y-1)))
{
route=new Route;
route->x=p.x;
route->y=p.y-1;
flag=false;
i++;
Route1->addObject(route);
}
//左
if (!isObjs(ccp(p.x-1,p.y))&&!isNoRoute(ccp(p.x-1,p.y)))
{
route=new Route;
route->x=p.x-1;
route->y=p.y;
i++;
Route1->addObject(route);
flag=false;
}
如判断是否要走哪个方向的路,a星算法的理解得来的:
if (Route1->count()!=0&&Route1->count()!=-1)
{
for (int i=0;i<Route1->count();i++)
{
Route *route=(Route *)Route1->objectAtIndex(i);
if (min>(fabs((float)(320-route->x))+fabs((float)(32*6-route->y))))
{
min=(fabs((float)(320-route->x))+fabs((float)(32*6-route->y)));
no=i;
}
}
_AllRoute->addObject(Route1->objectAtIndex(no));
//设置走过的点不可以走
_nogo->addObject(Route1->objectAtIndex(no));
Route* route=(Route *)_AllRoute->lastObject();
if (route->x-p.x>0)
{
direct=kRight;
}else if (route->y-p.y>0)
{
direct=kUp;
}else if (route->y-p.y<0)
{
direct=kDown;
}else if (route->x-p.x<0)
{
direct=kLeft;
}
p=ccp(route->x,route->y);
}else{
if (_AllRoute->count()!=0&&_AllRoute->count()!=-1)
{
Route*route =(Route *)_AllRoute->lastObject();
p=ccp(route->x,route->y);
}
}
现在还写不完全,源码就不贴出来了,大家加油吧