pygame - 创建流体效果以使表面更小

时间:2015-07-15 19:16:08

标签: python pygame surface

我想在pygame中创建一个效果,其中曲面变慢。我试试这个:

在主循环中:

earth = pygame.transform.scale(earth, (int(earth.get_width()*0.9999), int(earth.get_height()*0.9999)))   

如何开始 http://s14.postimg.org/d4rblmdgt/Untitled2.png

结局如何 http://s14.postimg.org/ng3oea565/Untitled1.png

我可以用哪种技术做到这一点?

谢谢!

`

1 个答案:

答案 0 :(得分:1)

好几件事可以帮助

  1. 不要覆盖你的原件,这会导致各种各样的转换问题积累。保持原件不变,并执行每次所需的总转换。
  2. 每次循环时都不要按静态数字缩放。每个循环之间的时间不会完全相同。收缩开始时的使用时间*收缩率。这样可以保持动画流畅,防止累积错误。
  3. 代码看起来像这样:

    # time_start is when you start the shrinkage
    # time_end is when the shrinkage should be completed
    now = time.time()
    if now < time_end:
        shrinking = (time_end - now) / (time_end - time_start)
        new_size = (int(earth.get_width()*shrinking),
                    int(earth.get_height()*shrinking))
        earth_scaled = pygame.transform.scale(earth, new_size)  
        # draw earth_scaled
    

    注意:当你的earth_scaled变小时,你可能还需要注意绘制它的位置。

    对评论的回应

    转型不是无损失的。每次变换都会使您的图像不那么完美。您可以获取工件,裁剪问题等。例如,在您的情况下,您将宽度和高度乘以小于1,然后使用int将其截断。这将导致每次迭代缩小1个像素(除非你有一个疯狂的大图像)。将图像缩放到比开始时少1个像素宽度可能只会忽略其中一个像素列。如果你继续这样做,它将每次删除1列和1行。 (不是你想要的)。相反,如果您拍摄完整的图像并进行缩放,则缩放功能可以更好地选择省略或合并的内容。