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

pygame - create fluid effect to make a surface smaller

我想在 pygame 中创建一个表面慢慢变小的效果。我试试这个:

在主循环中:

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

如何开始

结局如何

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

谢谢!

`

好吧,有几件事可以提供帮助

  1. 不要覆盖原来的,这会导致各种转换问题累积。保持原样,每次都执行您想要的整体转换。
  2. 不要每次循环都按静态数字缩放。每个循环之间的时间量不会完全相同。收缩开始后的使用时间*收缩率。这将使您的动画保持流畅并防止累积错误。

代码看起来像这样:

# 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 行。 (不是你想要的)。相反,如果您获取完整图像并对其进行缩放,则缩放功能可以更好地选择要省略或合并的内容。