敌人不跟随玩家 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;
我有一个项目要做,其中一个任务是制造一个跟随玩家的敌人。 这就是我画球员的方式
//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;