敌人不跟随玩家 OpenGL 2D

Enemy does not follow Player OpenGL 2D

我有一个项目要做,其中一个任务是制造一个跟随玩家的敌人。 这就是我画球员的方式

//Body
    modelMatrix = visMatrix;
    modelMatrix *= transform2D::Translate(translateX, translateY);
    modelMatrix *= transform2D::Scale(1, 1);
    modelMatrix *= transform2D::Rotate(playerAngle);
    modelMatrix *= transform2D::Translate(-50, -50);
    RenderMesh2D(meshes["square3"], shaders["VertexColor"], modelMatrix);

    //Eye1
    modelMatrix = visMatrix;
    modelMatrix *= transform2D::Translate(translateX, translateY);
    modelMatrix *= transform2D::Scale(0.25f, 0.25f);
    modelMatrix *= transform2D::Rotate(playerAngle);
    modelMatrix *= transform2D::Translate(150, 200);
    modelMatrix *= transform2D::Rotate(0);
    modelMatrix *= transform2D::Translate(-50, -50);
    RenderMesh2D(meshes["square1"], shaders["VertexColor"], modelMatrix);

    //Eye2
    modelMatrix = visMatrix;
    modelMatrix *= transform2D::Translate(translateX, translateY);
    modelMatrix *= transform2D::Scale(0.25f, 0.25f);
    modelMatrix *= transform2D::Rotate(playerAngle);
    modelMatrix *= transform2D::Translate(-150, 200);
    modelMatrix *= transform2D::Rotate(0);
    modelMatrix *= transform2D::Translate(-50, -50);
    RenderMesh2D(meshes["square1"], shaders["VertexColor"], modelMatrix);

敌人是这样画的

//Body
modelMatrix = visMatrix;
modelMatrix *= transform2D::Translate(translateEnemyX, translateEnemyY);
modelMatrix *= transform2D::Scale(1, 1);
modelMatrix *= transform2D::Rotate(enemyAngle);
modelMatrix *= transform2D::Translate(-50, -50);
RenderMesh2D(meshes["border"], shaders["VertexColor"], modelMatrix);

//Eye1
modelMatrix = visMatrix;
modelMatrix *= transform2D::Translate(translateEnemyX, translateEnemyY);
modelMatrix *= transform2D::Scale(0.25f, 0.25f);
modelMatrix *= transform2D::Rotate(enemyAngle);
modelMatrix *= transform2D::Translate(150, 200);
modelMatrix *= transform2D::Rotate(0);
modelMatrix *= transform2D::Translate(-50, -50);
RenderMesh2D(meshes["square2"], shaders["VertexColor"], modelMatrix);

//Eye2
modelMatrix = visMatrix;
modelMatrix *= transform2D::Translate(translateEnemyX, translateEnemyY);
modelMatrix *= transform2D::Scale(0.25f, 0.25f);
modelMatrix *= transform2D::Rotate(enemyAngle);
modelMatrix *= transform2D::Translate(-150, 200);
modelMatrix *= transform2D::Rotate(0);
modelMatrix *= transform2D::Translate(-50, -50);
RenderMesh2D(meshes["square2"], shaders["VertexColor"], modelMatrix);

我通过这样计算角度让敌人面对玩家,这很有效

enemyAngle = atan2(translateX - translateEnemyX, translateY - translateEnemyY);

而且我试过像这样将敌人移向玩家

enemySpeed = 10;
translateEnemyX += enemySpeed * cos(enemyAngle);
translateEnemyY += enemySpeed * sin(enemyAngle);

但这不起作用,敌人只是从玩家身边移开。

问题是,如何让敌人向玩家移动?

如果它远离玩家,也许你调换了 sin 和 cos。
我的猜测是,它应该是这样的: translateEnemyX += enemySpeed * sin(enemyAngle); translateEnemyY += enemySpeed * cos(enemyAngle);

除此之外,我认为右侧还应该包含帧之间的增量时间,否则它会在更高的帧速率下移动得更快。

编辑:没关系,那不应该起作用,你的等式应该包含玩家的位置,因为那是你希望敌人移动的方向。
尝试计算敌人位置和玩家位置之间的差异,如下所示: translateEnemyX += (translatePlayerX - translateEnemyX) * enemySpeed * deltaTime; translateEnemyY += (translatePlayerY - translateEnemyY) * enemySpeed * deltaTime;