2D OpenGL生存射击项目中敌方跟随玩家旋转的角度计算问题
问题核心错误点
你现在的角度计算逻辑有三个明显问题:
- 朝向目标混淆:你需要敌方朝向玩家,不是朝向鼠标,计算时错误引入了
cursorPos变量,应该直接取玩家的中心坐标计算 - 冗余常量干扰:角度计算仅和两个点的坐标差值有关,和方块尺寸没有关系,不需要乘50相关的常量
- 多余正负号嵌套:多重负号搞混了逻辑坐标系的Y轴方向,导致角度计算完全偏离预期
正确计算步骤
1. 确认对象中心坐标
从你提供的绘制代码可以直接得到两个角色的中心坐标:
- 玩家中心:
(translateX, translateY)(你代码里玩家平移的变量值) - 敌方中心:
(translateEnemyX, translateEnemyY)(你现在代码里敌方写死的300/300要替换成这两个动态变量)
2. 计算方向向量差值
假设你使用的逻辑空间Y轴向上(和OpenGL默认2D坐标系一致),计算敌方指向玩家的向量:
float dx = translateX - translateEnemyX; float dy = translateY - translateEnemyY;
3. 计算旋转角度
从你眼睛的绘制逻辑可以看出,角色模型默认朝向Y轴正方向,若你使用的Rotate函数参数为逆时针角度,直接用以下代码即可:
enemyAngle = atan2(dx, dy);
如果测试后发现敌方朝向完全相反,调整正负号即可:
enemyAngle = -atan2(dx, dy);
内容的提问来源于stack exchange,提问作者Catalin Ursu
相关产品推荐
相关产品推荐

