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

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

本文关键字:SDL2 C++ 玩家 跟随 敌人      更新时间:2023-10-16

所以我浏览了论坛,发现了一个公式,比如说,应该让敌人跟随玩家。然而,当我运行我的程序时,敌人开始走,但没有朝着玩家的方向走。无论我把角色放在哪里,敌人都会直接往下走。这是代码:

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结构中存储的整数位置中更新可视化,根据第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