敌人不会跟随玩家。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结构中存储的整数位置中更新可视化,根据第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
相关文章:
- 如何创建事件驱动的 SDL2 应用程序
- 使用 SDL2 和SDL_image C++加载图像
- 将 SDL2 与 CMake 链接起来
- SDL2 透明背景
- 如何在使用 SDL2 的 Eclipse 中构建 c++ 程序
- 不带轮询的 SDL2 事件回调
- C++ SDL2:如何将矩形渲染到多个视口中
- SDL2 调整窗口大小后如何缩放鼠标坐标?
- SDL2 二维纹理分配/池化
- 如何使用 sdl2 快速绘制像素网格?
- 看不到文件'SDL2.lib'
- 我的 SDL2 程序需要哪些二进制文件,以便它在另一台未安装 SDL2 的计算机中工作
- SDL2 无法正确绘制矩形
- 实施英特尔实感和 SDL2 时出现问题
- 找不到 sdl2.dll
- SDL2 程序只写入部分字符串
- 为什么在使用 SDL2 时仍然收到'undefined reference'链接器错误?
- 在另一台 PC 上执行程序时加载 SDL2 共享库时出错
- SDL2 (C++) 如何使图像变小
- SDL2 不是基于 VS 代码构建的