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);
}
}
现在还写不完全,源码就不贴出来了,大家加油吧
做了最初的闪躲障碍物功能,截图如下:
算法参照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);
}
}
现在还写不完全,源码就不贴出来了,大家加油吧
相关文章推荐
- cocos2d-x【小菜在学习】做个小游戏俄罗斯方块(一)
- cocos2d-x【小菜在学习】做mario小尝试
- cocos2d-x【小菜在学习】做个小游戏俄罗斯方块(三)
- cocos2d-x【小菜在学习】做个小游戏俄罗斯方块(二)
- cocos2d-x 【小菜在学习】锚点与位置个人理解笔记
- cocos2d-x【小菜在学习】体验之isBackgroundMusicPlaying对其影响
- cocos2d-x【小菜在学习】如何增加光晕效果以及CCSpriteFrameCache使用
- cocos2d-x学习笔记—单点触控
- Cocos2d-x学习笔记(三)之 坐标系简介
- 【cocos2d-x】cocos2d-x学习笔记之一
- cocos2d-x 学习应用
- 学习cocos2d-x笔记-2
- cocos2d-x 3.1.1 学习笔记[14] UserDefault 用户数据存储
- cocos2d-x 3.1.1学习笔记[23]寻找主循环 mainloop
- cocos2d 学习 第四章
- cocos2d学习记录(九)-尾巴效果
- cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第二步---编辑器(1)--触摸加入点
- cocos2d-x 3.1.1 step by step 学习笔记3 Win32平台下中文乱码问题
- 【Cocos2d-html5游戏引擎学习笔记(2)】Hello Cocos2d-Html5
- Cocos2d-x学习(十一):用cocos2d-x实现MoonWarriors(游戏场景切换和主菜单实现)