我正在使用带有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 上,那么对他们来说可行的替代方案是什么?
答案 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;
}
}