c++ - 如何让“敌人”围绕玩家运行?
问题描述
我试图让敌人精灵靠近玩家精灵时绕着他们旋转。我正在使用极坐标系来找到它们应该停留的点。目前精灵闪烁并且没有正确保持在位置上,我无法完全弄清楚为什么。
使用enemySprite坐标时似乎会出现问题。当使用设定的数字时,没有闪烁,它的行为符合预期。
目前,代码将敌人的位置设置在圆圈上,而不是逐渐将其移动到那里。
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(...)
设置位置。
想一想。
每一帧,敌舰都会跳到一个新的位置,你会再次改变它。该代码完全按照您的要求执行。
相反,您需要两个职位。改造前后。
推荐阅读
- c - 如何使用函数 sscanf 读取特定字符?
- python - python字典到sqlite插入
- php - Wordpress - 将第一张图片设置为旧帖子的特色图片
- generics - 如何为任何元素序列实现特征?
- angular - 组合多个可观察对象并在 Angular 中返回至少一个值时采取行动
- java - 如何实现返回压缩流的 Java 8 通用方法,其中两个流中的对象依次出现?
- c# - 在列表中搜索子类属性
- c++ - 在 Node.js 插件中阻塞调用
- java - out.printf 未打印预期结果
- python - 在 GCP 上通过 python 脚本访问 Kafka 生产者服务器