如何让"Enemies"围绕玩家运行?
How to make "Enemies" orbit around the Player?
我试图让敌人的精灵在玩家精灵靠近时围绕它们旋转。我正在使用极坐标系统来找到它们应该停留的点。目前精灵闪烁并且无法正确保持在位置,我无法完全弄清楚原因。
使用敌人精灵坐标时似乎出现了问题。使用设定数字时,没有闪烁,并且按预期运行。
目前,代码将敌人的位置设置为在圆圈上,而不是逐渐将其移动到圆圈上。
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(...)
来设置位置。
想一想。
每一帧,敌舰都会跳到一个新的位置,你会再次变换。代码完全按照您的要求执行操作。
相反,您需要两个职位。改造前后。
相关文章:
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 代码在main()中运行,但在函数中出现错误
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何在运行中期切换GTK CSS style_context
- 如何在MS Visual Studio 2019中运行QT UI
- 如何通过cpp程序运行shell脚本
- IPC使用多个管道和分支进程来运行Python程序
- 删除指向指针的指针是运行时错误吗
- 如何用参数值调用函数(仅在运行时已知)
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- c++中的指针和运行时错误
- 在C应用程序中运行C++(带有STL)函数
- 运行程序时出现问题
- 控制允许动态运行c++的并发操作数
- 如何让"Enemies"围绕玩家运行?