PyGame原生方法如何自动缩放输入以匹配表面分辨率?
这个问题和另一个问题有关。
在我的程序中(我用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的邮件列表,那里有一个超级长的讨论串,大家对此进行了广泛的讨论。
总结一下就是:
- 目前还没有这样的功能。
- 有兴趣去实现它,或者至少尝试去实现它……
- ……不过这并不是核心开发者的优先事项。
- 解决这个问题的方法有很多:
- 缩放应该是双向的(输入坐标和读取坐标)吗?
- 如何处理没有厚度但又需要可见的线条?
- 如何处理图像边缘的物体的可见性?应该用它们的哪个点作为参考来判断某个像素是否应该被点亮?
- 还有更多问题(可以查看链接的讨论串)。