当前位置: 首页 > 编程语言 > VC.NET > 正文

C++游戏开发十八 角色在障碍物中智能行走的实现

时间:2014-11-04

最近一直在忙着写一个游戏,其中融入了RPG元素,有人物的行走与障碍物判定。

一般而言,当人物行走时碰到障碍物时应该停止不动,就像下面这样

这样的实现非常简单,每次移动前判断人物的矩形是否和障碍物相交即可,如果只以向右的方向为例,代码大概可以写成这样

if(行走)  
{  
switch(方向)  
{  
case 右:如果当前位置的右边位置是障碍物,则不动,否则将人物移到右边位置  
break;    
}  
}

这看起来非常合理,我一开始也是按照这个思路写的,但是当人物处于下面这种情况时,即人物只有一部分碰撞到障碍物的时候

更多精彩内容:http://www.bianceng.cn/Programming/VC_NET/

如果仍然像上面那样,障碍物和人物矩形仍然是相交的,所以人物仍然是行走不了的,这在游戏中可以接受,但是看起来总是有一种违和感,为什么我们的人物不能智能一点,在拐角处可以绕过障碍物呢?

下面是自己的想法和实现,希望可以给新手朋友们参考,也希望路过的高手可以指导下,毕竟自己对游戏了解的不太多。

在上图的情况中,我们看到人物(就是那只可爱的小狗)向右行走的时候下半部分碰撞到了障碍物,而上半部分没有碰撞到,那么我们希望出现的情况就是小狗先向上行走一点,使得下半部分不再与障碍物碰撞,然后向右行走。如果是上半部分碰撞到障碍物,而下半部分没有碰撞到障碍物,那么小狗应该向下行走一点,再向右行走。

另外,当处于下面这样的情况时