PyGame原生方法如何自动缩放输入以匹配表面分辨率?

0 投票
2 回答
501 浏览
提问于 2025-04-16 22:10

这个问题和另一个问题有关。

在我的程序中(我用pygame来绘制视频上的物体),我有两个世界的表示方式:

  • 一个物理世界,我用它来进行所有的模拟计算,物体在一个1000x1000米的表面上。
  • 一个视觉世界,我用它在屏幕上绘图,物体在一个100x100像素的窗口里。

我想要实现的是能够把我的物理/现实世界坐标传递给pygame的绘图函数(这些函数通常接受像素为单位的输入)。换句话说,我希望能够这样说:

Draw a 20m radius circle at coordinates (200m, 500m)

使用pygame的准确语法:

pygame.draw.circle(surface, (255,255,255), (200,500), 20)

然后在像素坐标(20,50)处绘制一个半径为2像素的圆。

请注意,这个问题是关于使用pygame的原生方法来实现这个功能,而不是一些变通的方法(如果你想回答那个问题,可以看看我之前提到的那个问题)。

感谢你的时间和支持。

2 个回答

1

pygame没有直接的方法来做到这一点。

你可能对pygame的功能有些误解。它并不是用来绘制矢量图形的,而是用来在视频表面上写入像素的。

既然你有矢量对象,你就必须定义它们如何转换成像素。这样做并不是变通办法,而是使用pygame的正确方式。

1

因为看起来PyGame的开发者不太常在这里,所以我把这个问题带到了PyGame的邮件列表,那里有一个超级长的讨论串,大家对此进行了广泛的讨论。

总结一下就是:

  • 目前还没有这样的功能。
  • 有兴趣去实现它,或者至少尝试去实现它……
  • ……不过这并不是核心开发者的优先事项。
  • 解决这个问题的方法有很多:
    • 缩放应该是双向的(输入坐标和读取坐标)吗?
    • 如何处理没有厚度但又需要可见的线条?
    • 如何处理图像边缘的物体的可见性?应该用它们的哪个点作为参考来判断某个像素是否应该被点亮?
    • 还有更多问题(可以查看链接的讨论串)。

撰写回答