使用 pygame_util 缩放图形

问题描述

我正在用 pymunk 构建模型,我需要使用实际尺寸(模型的物理尺寸约为 1 米)。有没有办法在 pygame_util 中缩放图形,使 1 米对应 800 像素?

解决方法

Pymunk 本身是无单位的,如下所述:http://www.pymunk.org/en/latest/overview.html#mass-weight-and-units

Pymunk 6.1(及更高版本)

使用 Pymunk 6.1,现在可以在 SpaceDebugDrawOptions 对象(或库特定的实现之一,如 pygame_utils.DebugDraw)上设置转换,如此处所述http://www.pymunk.org/en/latest/pymunk.html#pymunk.SpaceDebugDrawOptions.transform 有了这个新功能,应该可以设置缩放变换来实现您的要求。

Pymunk 6.0(及更早版本)

当与 pygame_util 一起使用时,距离将以像素为单位进行测量,例如一个 10x20 的盒子形状 (create_box(size=(10,20))) 将被绘制为一个 10x20 像素的矩形。这意味着实现您所要求的最简单方法是将 Pymunk 长度单位定义为 0.125 厘米,因此框形状为 1.25 厘米 x 2.5 厘米以上。

另一种方法是在完成后缩放表面。因此,不是在 pymunk.pygame_util.DrawOptions() 中使用屏幕表面,而是使用自定义表面,在绘制空间时缩放该表面,然后将结果 blit 到屏幕上。我不认为这个选项是第一个选项,因为可能会有缩放工件,但取决于您的确切用例,它可能会起作用。