【问题标题】:Animate pygame sprite in elliptical path椭圆路径中的动画pygame精灵
【发布时间】:2026-02-17 04:50:01
【问题描述】:

这是 python 2.6 上的 pygame 1.9..

这里是一个screenshot 我的“游戏”中当前正在绘制的内容,以提供一些背景信息。 Here 是代码。

它应该是绕地球运行的月球(我不是在尝试进行真正的模拟或其他任何东西,我只是在使用该设置来玩耍和学习 pygame)。它是 2 个圆圈,卫星绕地球运行椭圆轨道。我的最终游戏是让月球跟随它围绕地球的轨道,但我想稍后使用键盘控制来调整月球轨道的形状。

我真的只需要帮助弄清楚如何让月亮跟随路径,我可能会解决剩下的问题。

【问题讨论】:

    标签: python animation pygame


    【解决方案1】:

    这是沿椭圆生成点的方法:

    for degree in range(360):
        x = cos(degree * 2 * pi / 360) * radius * xToYratio
        y = sin(degree * 2 * pi / 360) * radius
    

    (x,y) 将跟随以(0,0) 为中心的椭圆,y 半径为radius,x 半径为xToYratio。在您的情况下,您可能希望 degree 以某种方式与时间流逝相关。

    编辑:你也可以这样做:

    for degree in range(360):
        x = cos(degree * 2 * pi / 360) * xRadius
        y = sin(degree * 2 * pi / 360) * yRadius
    

    xRadius 是矩形宽度的一半,yRadius 是矩形高度的一半。直观地可视化它 - 你有一个圆圈,并且你正在将它拉伸(即缩放它,即乘以它),使其在水平和垂直方向上都与矩形一样大。

    【讨论】:

    • 我认为这通常是我需要做的,但我的部分问题是我不确定如何找到椭圆的半径,因为我使用 Rect 类定义了椭圆(请参阅我的代码)。
    • 不以度为单位可能会很方便...如果您有许多精灵,并且每次对它们都调用一次更新函数,那么度数会导致非常混乱的集成。如果有人想要,我会在编写代码后发布一个以这种方式工作的版本。
    • 度数和其他有什么区别?