您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x【小菜在学习】做个Towerdefend初期

2013-04-17 19:57 357 查看
学习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);
}
}

现在还写不完全,源码就不贴出来了,大家加油吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息