gpt4 book ai didi

c++ - 围绕另一个物体旋转的物体不断加速

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:50:58 24 4
gpt4 key购买 nike

好吧,我还是编程的新手,我一直在尝试处理场景图,每当我旋转一个对象时,当我想让它们做的只是围绕父对象旋转时,它的子对象就会围绕它加速它(父对象)旋转的速度相同。

这就是它们旋转的原因

if (sf::Keyboard::isKeyPressed(sf::Keyboard::Q) == true)
{
if (Entity != nullptr)
{
Entity->theSprite.rotate(-10);
if (Entity->isParent == true)
{
for (int i = 0; i < Entity->listofChildren.size(); i++)
{
Entity->listofChildren.at(i)->theSprite.rotate(-10);
Entity->listofChildren.at(i)->theSprite.setPosition(rotateAround(Entity, Entity->listofChildren.at(i)));
}
}
}
}

这就是计算旋转的原因

sf::Vector2f winMan::rotateAround(_Entity* toRotateAround, _Entity* toRotate)
{
sf::Vector2f newPos;
sf::Vector2f toRotateAroundpos = toRotateAround->theSprite.getPosition();
sf::Vector2f toRotatepos = toRotate->theSprite.getPosition();

float angle = toRotateAround->theSprite.getRotation() * (_PI / 180);

newPos.x = cos(angle) * (toRotatepos.x - toRotateAroundpos.x) - sin(angle) * (toRotatepos.y - toRotateAroundpos.y) + toRotateAroundpos.x;
newPos.y = sin(angle) * (toRotatepos.x - toRotateAroundpos.x) + cos(angle) * (toRotatepos.y - toRotateAroundpos.y) + toRotateAroundpos.y;

return newPos;
}

我一直在试图弄清楚为什么会发生这种情况,我的猜测是它只是不断累加每一帧,但我不知道如何让它停止 :(

最佳答案

问题是你首先旋转父对象

Entity->theSprite.rotate(-10);

然后稍后使用这个父级的旋转来确定这里的子级的旋转角度

float angle = toRotateAround->theSprite.getRotation() * (_PI / 180);

让我们来看看程序计算的内容:

  1. 迭代:ParentAngle = -10 -> children 的旋转加上 -10 -> -10
  2. 迭代:ParentAngle = -20 -> children 的旋转加上 -20 -> -30
  3. 迭代:ParentAngle = -30 -> child 的旋转加上 -30 -> -60

与其使用父 Sprite 的当前角度作为引用,不如将旋转值直接传递给函数 rotateAround

关于c++ - 围绕另一个物体旋转的物体不断加速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28982882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com