OpenGL - 2D敌人不旋转面对玩家

Posted

技术标签:

【中文标题】OpenGL - 2D敌人不旋转面对玩家【英文标题】:OpenGL - 2D enemy not rotating to face player 【发布时间】:2016-03-04 19:41:10 【问题描述】:

我正在创建一个 2D 游戏,目前我正在尝试旋转我的敌人,以便在我的玩家移动时它始终面向我的玩家。我正在使用点积计算角度然后旋转敌人,但是它不起作用。下面是我如何计算角度...

//calculating the angle
float numerator = (player.x*enemy.x)+(player.y*enemy.y);
float denominator = sqrt((player.x*player.x)+(player.y*player.y))*sqrt((enemy.x*enemy.x)+(enemy.y*enemy.y));
float angle = acos(numerator/denominator);

这也在更新函数中重新计算。

下面是我如何显示我的敌人...

glPushMatrix();
    glTranslatef(enemy.x, enemy.y, 0);
     glRotatef(angle,0,0,1);
     glTranslatef(-enemy.x, -enemy.y, 0);
     enemy.drawCircle(enemy.x,enemy.y, enemy.radius);
glPopMatrix();

我哪里错了?

【问题讨论】:

在什么情况下不工作? 我也强烈建议,强烈建议您将代码库转换为现代 OpenGL,因为尝试在 OpenGL 1.x 中执行此操作是一场噩梦,会导致像这样的问题。 This is a good site for learning modern OpenGL 它根本不旋转....所以我将它更改为旋转角度*180/PI 以查看它的作用,它有时会根据玩家的位置旋转以查看我的玩家,但大多数它没有正确旋转的时间 谢谢你,我计划在某个时候升级到现代 OpenGL,但想先尝试解决这个问题,因为据我所知,我正在正确应用数学/: 您是否尝试过围绕对象逐步旋转以查看它的反应? 【参考方案1】:

我认为你的几何公式​​有误。您实际上找到了敌人的矢量和玩家的矢量之间的角度。

您可能需要的是它们的差异向量的角度

double dx = enemy.x - player.x;
double dy = enemy.y - player.y;
double ang = atan2(dy, dx);

【讨论】:

我还建议您定义一个 Point 结构(与向量相同)或使用一个已经编写好的结构。拥有(a - b).ang 之类的东西非常方便。如果有帮助,请考虑accepting 的答案。

以上是关于OpenGL - 2D敌人不旋转面对玩家的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenGL 2D 中为敌人制作生成器

在 C++/OpenGL 中投影一个围绕另一个对象旋转的对象

OpenGL 旋转 2D 纹理

Unity OnTriggerEnter2D 有时不起作用

Unity2D 敌人追踪/攻击/移动AI 第二期

四元数旋转opengl