A*嵌入direct

今天做了几个小时,全屏下的direct,24位位图映射32位,先检查了昨天的算法,似乎有些记录的信息是不需要的,比如说NODE指向的child数组,是没有必要记录的,所以干脆删了它,后来看应该需要一个next指针,因为记录的是father,而精灵如果走,就必须按顺序知道第一个要走的点,所以还要顺序排过来,就像这样:

     result = pathFinder.FindPath(sourcePoint.x,sourcePoint.y,destPoint.x,destPoint.y);    
     
     if((result!=NULL)&&((result->father)!=NULL))
     {
      while(result->father->father)
      {
       result->father->next = result;
       result = result->father;
      }
     } 

得到的result返回的便是第一个要走方格的指针。

然后是模拟的实现,用昨天的方法,刚好矩阵是16行,12列,实际上昨天试验的时候就计算好了,每个方格大小为64x64,,1024X768的分辨率就刚刚好了。由于是先试验嵌入direct,所以我采取的方法是修改昨天的矩阵数组,还是从数组中查询信息,而这边的屏幕刚好每个格子做好对应,不如矩阵是[0][0]是障碍物,我就在屏幕0,0的坐标地方画一个64X64的方格,表示障碍,而矩阵中是空格的地方,这边就以白色表示,寻路时仍然按照数组进行查询。这样我在寻好路之后,得到一个路径的链表,只要把链表中的行值x和列值y分别乘以64,然后赋值给精灵下次要走的点就OK了。

有这两点要注意的:
【1】,昨天的程序有部分是参考网上那个介绍的算法的,但是那个似乎没有考虑过斜角的情况,就是精灵不能穿过corner的问题,看了那个介绍的第二部分(那个外国老的),我加上了这部分处理。
【2】,用矩阵数组和屏幕进行对应检测的时候要注意矩阵的x,y和屏幕的笛卡儿坐标是相反的,比如二维数组的第二行,第三列,在矩阵中,当然x=2,y=3,而在屏幕的笛卡儿坐标上,左上角是0,0,横向向右是X方向扩展增大,纵向向下是Y方向扩展增大,所以这么对应过来到屏幕上(64X64是一个格,可以理解成一个点)应该是x=3,y=2,这和二维数组中的x,y是相反的,如果这点求错了,屏幕的走路就和数组检测不一致了,当然就出项了精灵穿墙的情况。

截个图:

======================================================================

=====================================================================

=====================================================================

======================================================================

=====================================================================

最后到达点的目的地~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值