敌人不会跟随玩家。 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;
}
问题出在从浮点数到整数的近似上,如果你的速度很慢,这个问题尤其明显。您应该确保:
dirx
和 diry
是浮点数
- 你保留玩家和敌人
位置存储在浮点变量中,您可以使用这些变量进行所有计算并更新新位置
- 每次移动时,您都会更新存储在 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
所以我浏览了论坛并找到了应该让敌人跟随玩家的公式。但是,当我 运行 我的程序时,敌人开始行走但没有朝玩家的方向走。无论我把我的角色放在哪里,敌人都会笔直地往下走。这是代码:
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;
}
问题出在从浮点数到整数的近似上,如果你的速度很慢,这个问题尤其明显。您应该确保:
dirx
和diry
是浮点数- 你保留玩家和敌人 位置存储在浮点变量中,您可以使用这些变量进行所有计算并更新新位置
- 每次移动时,您都会更新存储在 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