【发布时间】:2014-10-03 17:46:14
【问题描述】:
所以我正在使用 C++ 和 SFML 开发一个 AI 系统,我希望在该系统中敌人跟随玩家。我将创建它,以便敌人向玩家 30 帧前所在的点移动(因此它会不断更新)。但我的问题很简单,让敌人移动到特定点的数学原理是什么?就像假设玩家在 (230, 400) 并且敌人在 (100, 200) 我如何让敌人(使用速度为 3 的 .move() 函数)移动到那个点?任何帮助都会很棒!
---在下面更新了处理运动的当前代码-----
float angle = atan2(v2iEnemyPos[1].y - rsPlayer.getPosition().y, v2iEnemyPos[1].x - rsPlayer.getPosition().x);
angle =angle * 180 / (atan(1) * 4);
sf::Vector2f newpos((cos(angle))*2, (sin(angle))*2);
std::cout << newpos.x << " " << newpos.y << std::endl;
rsEnemy[1].move(newpos.x, newpos.y);
rwWinOne.draw(rsPlayer);
rwWinOne.display();
rwWinOne.clear();
【问题讨论】:
-
这取决于你希望敌人如何表现。如果让敌人直接向玩家直线移动,玩家可能很难避开敌人。在开始编码之前,您必须首先考虑这一点。
-
没错,但我可以使用节点让它以后有更弯曲的路径,但我仍然必须知道如何将敌人移动到一个位置,不是吗?
-
最基本的形式,
position += speed * Vector2(cos(angle), sin(angle))。 -
@remyabel 谢谢你,我想我开始明白了,但是你如何将一个向量乘以一个常数,比如 2?你的意思是 2 * Vector2.x 和 2 * vector2.y?
-
速度可以是 Vector2(如果 x 和 y 不同),也可以是标量(在这种情况下,它与您所说的相同。)