当位图在Allegro中跟随另一个时闪烁

时间:2018-11-01 19:04:39

标签: c allegro allegro5

我正在使用带有Allegro 5的C开发2D游戏。现在,我正在编码游戏中敌人的移动,一个跟随玩家的位图(坐标X和Y)。尽管它在X轴上完美运行,但通常无法朝Y轴上的播放器移动,导致位图闪烁而不是移动。

这是我正在使用的代码:

if(*xEnemy < *x){
    *xEnemy += 3;
}else if(*xEnemy > *x){
    *xEnemy -= 3;
}else if(*yEnemy < *y){
    *yEnemy += 3;
}else if (*yEnemy > *y){
    *yEnemy -= 3;
}

如果我使用 ifs 而不是 else ifs 会很好,但是敌人会沿着对角线行走,这不是我计划的游戏。很明显,问题出在 elses 上,那么对他们来说可行的替代方案是什么?

1 个答案:

答案 0 :(得分:0)

例如,您可以查看相对距离的绝对值来决定在x或y方向上移动吗?

xAbs = abs(*xEnemy - *x);
yAbs = abs(*yEnemy - *y);

   if (xAbs < yAbs)
   {
      // Move in the x direction since we're closer there
      if(*xEnemy < *x){
          *xEnemy += 3;
      } else if(*xEnemy > *x){
          *xEnemy -= 3;
      }
   }
   else
   {
      // Move in the y direction
      if(*yEnemy < *y){
          *yEnemy += 3;
      } else if (*yEnemy > *y){
          *yEnemy -= 3;
      }
   }