我正在尝试让敌人精灵在玩家精灵接近时围绕其旋转。我正在使用极坐标系统来找到它们应停留的点。目前,子画面会闪烁并且无法正确定位,我无法完全弄清原因。
使用敌人的精灵坐标似乎出现了问题。使用设定数字时,不会闪烁,并且表现正常。
当前代码将敌人的位置设置在圆圈上,而不是逐渐将其移动到圆圈上。
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++
预期结果是敌人在玩家周围绕圈而不会闪烁。
只想在此先感谢您。
答案 0 :(得分:0)
您使用(*enemyShip).m_sprite.getPosition()
获取位置,计算一些变换,然后使用(*enemyShip).m_sprite.setPosition(...)
设置位置。
想一想。
每帧,敌军舰艇将跳到一个新位置,您将再次对其进行变换。该代码完全符合您的要求。
相反,您需要两个职位。转换前后。