cocos2d-x游戏实例(5)-A星算法(1)

小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man

继续上一篇地图上的处理,不过和本篇相比,我们之前的四篇,可都算是“热身准备”了,因为我们要研究一个算法并把它加入到我们的游戏中,这种算法在rpg,以及现在比较火爆的“乱斗”类(参考战斗之心battleheart)中都是比较多地被采用了。

下面我们就介绍一下A星算法,他就是一种启发性的算法,根据现在到达这个位置的步数及之后的“估计步数”,即f=g+h,f是整个从起点到终点的代价,g是从起点到我们目前位置的步数,h是从目前位置到终点的估计值,注意这里是估计值,所以我们得到解并不一定是最好的解,具体解“好”到什么程度呢?就是要根据h的估计的好坏,因此只是一个较优解。(以上的部分只能说是我对A星算法较为浅的理解,只能算是初探吧,有不足之处欢迎指正,这里只是为了更好的解释我的程序。)

我的程序的流程可以分为如下几步,有一个open表,有一个close表,open表首先存储我们的起点,然后由此出发,首先把起点放入close列表,并检测这点周围点的f值(g+hh我们通过本点到终点的横纵索引差估计而来),把剩下的点放入open列表中,并根据f值进行堆排序,然后把f值最小的点放入close列表中,然后继续上面的循环,继续处理,直到找到终点为止。当然我们还要根据我们的游戏做一些处理即是处理地图中的碰撞等,我们要让我们的人物绕过碰撞。

首先看一下我们的程序结构


首先我们的MapScene得到了保留,然后AstarA星算法的核心算法类,AstaritemA星列表中的列表项,首先看Astaritem


我们为了让此类更好的和cocos2d-x结合,也使用同样的内存管理机制,我们让此类继承与CCNode类,而其中有六个变量,分别是行列,g函数h函数f函数,和在堆排序中的父节点。我们采取set/get方法来管理这六个值

如有错误之处,希望大家多多指正

下一篇继续A星算法游戏实例

相关文章

操作步骤 1、创建cocos2d-x工程 2、新建 Scene1.cpp Scene1.h Scene1.h代码 #ifndef __SCENE1_H__#defi...
开发环境:OS(WINDOWS 8.1 X64 企业版) cocos2d-x 2.2.1 vs2010 想给vs安装上cocos的模版,执行Install...
把创建项目做成一个批处理,当创建项目时可以省时省力很多。 操作步骤 1、在 E:cocos2d-x-2.2.1toolspr...
https://www.cnblogs.com/JiaoQing/p/3906780.html 四个响应函数 1 EventListenerPhysicsContact* evC...
转载于 http://www.cnblogs.com/kenkofox/p/3926797.html 熟悉js的dom事件或者flash事件的,基本都能立...
ScrollView(滚动容器)加载大量item时会导致游戏界面的卡顿,严重时整个界面会出现卡死的情况。最近项...