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

来源:互联网 发布:淘宝竞品表格 编辑:程序博客网 时间:2024/05/19 00:55

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

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

下面我们就介绍一下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星算法游戏实例


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 ph计斜率不到90怎么办 ph计斜率低于90怎么办 顾客说衣服起球怎么办 买的手机壳太滑怎么办 硅胶手机壳太滑怎么办 磨砂手机壳太滑怎么办 被热胶棒烫了怎么办 车钢垫子次了怎么办 【图】机组主轴密封漏水怎么办? 孕妇吃了好多杏怎么办 怀孕6个月吃了好多杏怎么办 白色纯棉衣服染色了怎么办 红色硅胶壳黑了怎么办 小米6gps信号弱怎么办 网线头卡子断了怎么办 入户网线太短了怎么办 孩子弹钢琴大拇指出琴键怎么办 手指肿胀疼痛变粗怎么办 iphone系统占用内存大怎么办 手机系统占用内存大怎么办 头盔固定配件掉了怎么办 移动4g网络不好怎么办 wifi登录密码忘记了怎么办 电脑登录密码忘记了怎么办 笔记本电脑登录密码忘记了怎么办 信用卡登录密码忘记了怎么办 华为p9后置摄像头模糊怎么办 手机图片文件夹删了怎么办 发票系统导出的xml怎么办 微信支付被限制怎么办 跨行三天不到账怎么办 测速正常但实际很慢怎么办 善领wifi上网慢怎么办 文件太大拷贝不到u盘怎么办 电脑的视频文件不显示缩略图怎么办 无线网连接不上怎么办 路由器wifi密码忘了怎么办 路由器账号密码忘了怎么办 刷卡刷多了钱怎么办 刷卡刷了两次钱怎么办 小米手机强刷后一联网就被锁怎么办