旋转实体(轨道运行)

时间:2015-07-21 22:19:53

标签: c++ rotation sfml

使用C ++和SFML。我有三个实体。我们称它们为太阳,地球和月亮。

首先,太阳,根本不动。 第二,地球,围绕太阳旋转,这似乎工作得很好。 最后,月球确实保持旋转到一个点,但似乎是在地球周围做一个大的椭圆形,而不是围绕它进行一般旋转。当我实际上阻止地球旋转时,月亮旋转正常。

我假设地球位置变化正在影响月球的旋转方式。

sf::Transform rotation;
rotation.rotate(mOrbitSpeed * dt.asSeconds(), mParent->getPosition());
sf::Vector2f positionAfterRotation = rotation.transformPoint(getPosition());
setPosition(positionAfterRotation);

行星的起源设置在中间,I.E。所以getPosition()也是这个星球的中心。获取位置返回x和y坐标。 mParent将是轨道运行的父母(地球的I.E.太阳。)

有什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:0)

根据Beta上面提到的内容,上面的编码已经改变了。不妨分享。

sf::Transform orbitalRotation;
orbitalRotation.rotate(mOrbitSpeed * dt.asSeconds(), mParent->getPosition());

if (mParent->mCanOrbit && mParent->mOrbitSpeed != 0.f)
    orbitalRotation.combine(mParent->getOrbitRotation());

sf::Vector2f positionAfterRotation = orbitalRotation.transformPoint(getPosition());
setPosition(positionAfterRotation);
mRotation = orbitalRotation;

这里所做的几乎就是我存储旋转并将其与父项旋转速度相结合(如果有的话)。 mRotation是一个保存的变量。您可能希望使用初始旋转值初始化它,但除此之外它似乎旋转。还测试了拥有“迷你卫星”的月球。附上,它也很好地工作了三个。

谢谢!