【问题标题】:Flickering when a bitmap follows another in Allegro当位图在 Allegro 中跟随另一个位图时闪烁
【发布时间】:2019-04-06 01:27:40
【问题描述】:

我正在使用 C 和 Allegro 5 开发 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 上,那么有什么可行的替代方案呢?

【问题讨论】:

  • 我不清楚你想要什么。您是说您只想在每次检查时更新 xEnemy 或 yEnemy 一次?或者每次检查只更新 xEnemy 或 yEnemy 之一?使用edit 更新问题。但是,一般来说,用简单的语言向你自己和我们解释你期望在游戏中的每一个动作或检查会发生什么。然后代码将在上下文中。
  • 我希望敌人仅使用 X 或 Y 轴(无对角线)跟随玩家。代码可以正常工作,敌人一直跟随角色穿过他移动的轴,然后切换到相反的轴。问题是在改变它的轴时有时会发生闪烁。

标签: c allegro allegro5


【解决方案1】:

能不能看一下相对距离的绝对值来决定是在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;
      }
   }

【讨论】:

  • 感谢您的回答!我以前试过。问题是敌方位图永远不会向相反的轴移动,除非玩家角色设法将相对距离转得比另一个轴更大'(如果他们在同一个 x 位置,例如,他们的距离等于 0,则最小可能,所以没有运动)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-06
  • 1970-01-01
相关资源
最近更新 更多