敌人不会跟随玩家。 SDL2/C++

enemy won't follow player. SDL2/C++

所以我浏览了论坛并找到了应该让敌人跟随玩家的公式。但是,当我 运行 我的程序时,敌人开始行走但没有朝玩家的方向走。无论我把我的角色放在哪里,敌人都会笔直地往下走。这是代码:

void Enemy::enemyMovement(SDL_Rect& passed_player_rect, int speed){

player_rect = passed_player_rect;

dirx = player_rect.x - enemy_rect.x;
diry = player_rect.y - enemy_rect.y;

hyp = sqrt(dirx*dirx + diry*diry);

dirx /=hyp;
diry /=hyp;

enemy_rect.x += dirx * speed;
enemy_rect.y += diry * speed;
}

问题出在从浮点数到整数的近似上,如果你的速度很慢,这个问题尤其明显。您应该确保:

  1. dirxdiry 是浮点数
  2. 你保留玩家和敌人 位置存储在浮点变量中,您可以使用这些变量进行所有计算并更新新位置
  3. 每次移动时,您都会更新存储在 SDL_Rect 结构中的 整数位置 中的 可视化 ,并根据 current/updated 第 2 点描述的变量值

您总是使用 int 位置进行渲染(不能是半像素),但是在实体位置上您必须使用 float,除非加速度大于 1/-1(1 像素/更新的运动)。

struct Body {
float x,y;
float velX,velY;
}


Body body;        //at your entity class

敌人循环:

body.x += body.velX;    //and these are floats
body.y += body.velY;

ps。不要使用:

int speed

使用

float speed