Python 如何使用pygame放大/缩小?

Python 如何使用pygame放大/缩小?,python,zooming,pygame,Python,Zooming,Pygame,我正在制作一款模拟城市的应用程序。在应用程序中,会有随机时间发生的事件。我希望用户能够放大该事件以获得详细视图 在不放大的情况下,事件的位置仅标记为X。如果用户放大,用户将能够看到事件的更多详细信息;如果是车祸,放大用户可能会看到2辆以上的汽车相撞和一些动画等 我希望缩放工作的方式是让用户能够暂停应用程序,将鼠标移动到事件的位置,滚动以放大/缩小。您可以使用3D到2D投影功能(方法)来处理缩放(以及透视),例如: 在这种情况下,参数viewer\u distance用于缩放。您必须自己编写。Py

我正在制作一款模拟城市的应用程序。在应用程序中,会有随机时间发生的事件。我希望用户能够放大该事件以获得详细视图

在不放大的情况下,事件的位置仅标记为X。如果用户放大,用户将能够看到事件的更多详细信息;如果是车祸,放大用户可能会看到2辆以上的汽车相撞和一些动画等


我希望缩放工作的方式是让用户能够暂停应用程序,将鼠标移动到事件的位置,滚动以放大/缩小。

您可以使用3D到2D投影功能(方法)来处理缩放(以及透视),例如:


在这种情况下,参数viewer\u distance用于缩放。

您必须自己编写。Pygame是一个相当低级的库,它不会为您做那种工作。就像你说的,像《模拟城市》这样的游戏中的缩放行为比调整图像的大小更复杂。你是怎么做到的?我下面的答案有用吗?@JohnPeters还没有尝试过,仍然在做常规的东西。
class Point3D:

    def __init__(self, x = 0, y = 0, z = 0):
        self.x, self.y, self.z = float(x), float(y), float(z)

 ...

    def project(self, win_width, win_height, fov, viewer_distance, perspective):
        """ 
        Transforms this 3D point to 2D using a perspective projection. 
        """
        if perspective:
            factor = fov / (viewer_distance + self.z)
        else:
            factor = fov / viewer_distance
        x = self.x * factor + win_width / 2
        y = -self.y * factor + win_height / 2
        return Point3D(x, y, self.z)