Мерцание, когда растровое изображение следует за другим в Allegro - PullRequest
0 голосов
/ 01 ноября 2018

Я разрабатываю 2D-игру, используя C с Allegro 5. Сейчас я кодирую движение внутриигрового врага, растровое изображение, которое следует за игроком (координаты 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;
}

Было бы хорошо, если бы я использовал , если вместо , в противном случае, если , однако враг будет идти по диагональным путям, и я не планирую это для игра. Понятно, что проблема заключается в elses , так что для них является рабочей альтернативой?

1 Ответ

0 голосов
/ 01 ноября 2018

Можете ли вы взглянуть на абсолютное значение относительного расстояния, чтобы принять решение о перемещении в направлении 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;
      }
   }
...