如何让"Enemies"围绕玩家运行?

How to make "Enemies" orbit around the Player?

本文关键字:玩家 运行 Enemies      更新时间:2023-10-16

我试图让敌人的精灵在玩家精灵靠近时围绕它们旋转。我正在使用极坐标系统来找到它们应该停留的点。目前精灵闪烁并且无法正确保持在位置,我无法完全弄清楚原因。

使用敌人精灵坐标时似乎出现了问题。使用设定数字时,没有闪烁,并且按预期运行。

目前,代码将敌人的位置设置为在圆圈上,而不是逐渐将其移动到圆圈上。

for (auto enemyShip = enemyShipStorage.begin(); enemyShip != enemyShipStorage.end();)
{
if (!(*enemyShip).isOffScreen)
{
//Finding theta in degrees
//All positions use floats - sf::Vector2f
float theta = std::atan2((*enemyShip).m_sprite.getPosition().y - player.m_sprite.getPosition().y, (*enemyShip).m_sprite.getPosition().x - player.m_sprite.getPosition().x) * (180 / 3.141f);
//normalised so 0 is up
theta -= 90; 
if (theta < 0)
{
theta += 360;
}
else if (theta > 360)
{
theta -= 360;
}

//currently using fixed radius distance while testing
(*enemyShip).m_endPos.x = player.m_sprite.getPosition().x + (400 * std::cos(theta * (3.141f / 180)));
(*enemyShip).m_endPos.y = player.m_sprite.getPosition().y + (400 * std::sin(theta * (3.141f / 180)));
//set position to be at the point on the circle
(*enemyShip).m_sprite.setPosition((*enemyShip).m_endPos);
}
ship++

预期的结果是敌人在玩家周围形成一个圆圈,而不会闪烁。

只是想提前说谢谢你的任何帮助。

您可以使用(*enemyShip).m_sprite.getPosition()来获取位置,计算一些转换,然后使用(*enemyShip).m_sprite.setPosition(...)来设置位置。

想一想。

每一帧,敌舰都会跳到一个新的位置,你会再次变换。代码完全按照您的要求执行操作。

相反,您需要两个职位。改造前后。