C++游戏开发十八 角色在障碍物中智能行走的实现2014-11-04最近一直在忙着写一个游戏,其中融入了RPG元素,有人物的行走与障碍物判定。一般而言,当人物行走时碰到障碍物时应该停止不动,就像下面这样

这样的实现非常简单,每次移动前判断人物的矩形是否和障碍物相交即可,如果只以向右的方向为例,代码大概可以写成这样
if(行走){switch(方向){case 右:如果当前位置的右边位置是障碍物,则不动,否则将人物移到右边位置break;}}
这看起来非常合理,我一开始也是按照这个思路写的,但是当人物处于下面这种情况时,即人物只有一部分碰撞到障碍物的时候更多精彩内容:http://www.bianceng.cn/Programming/VC_NET/

如果仍然像上面那样,障碍物和人物矩形仍然是相交的,所以人物仍然是行走不了的,这在游戏中可以接受,但是看起来总是有一种违和感,为什么我们的人物不能智能一点,在拐角处可以绕过障碍物呢?下面是自己的想法和实现,希望可以给新手朋友们参考,也希望路过的高手可以指导下,毕竟自己对游戏了解的不太多。在上图的情况中,我们看到人物(就是那只可爱的小狗)向右行走的时候下半部分碰撞到了障碍物,而上半部分没有碰撞到,那么我们希望出现的情况就是小狗先向上行走一点,使得下半部分不再与障碍物碰撞,然后向右行走。如果是上半部分碰撞到障碍物,而下半部分没有碰撞到障碍物,那么小狗应该向下行走一点,再向右行走。另外,当处于下面这样的情况时