7

我在 PyGame 中对向量和物理进行一些操作,默认坐标系对我来说很不方便。通常该(0, 0)点位于左上角,但我宁愿原点位于左下角。我宁愿改变坐标系而不是转换我必须绘制的每一件事。

是否可以更改 PyGame 中的坐标系以使其像这样工作?

4

2 回答 2

14

不幸的是,pygame 不提供任何此类功能。最简单的方法是使用一个函数来转换坐标,并在绘制任何对象之前使用它。

def to_pygame(coords, height):
    """Convert coordinates into pygame coordinates (lower-left => top left)."""
    return (coords[0], height - coords[1])

这将获取您的坐标并将它们转换为 pygame 的绘图坐标,给定height窗口的高度和coords对象的左上角。

要改为使用对象的左下角,您可以采用上述公式,并减去对象的高度:

def to_pygame(coords, height, obj_height):
    """Convert an object's coords into pygame coordinates (lower-left of object => top left in pygame coords)."""
    return (coords[0], height - coords[1] - obj_height)
于 2012-04-17T01:43:24.667 回答
0

If the objects you're trying to render are vertically symmetrical (like rectangles), you can just flip the screen to get the coordinate system to be the bottom-left, like this:

display_surface = pygame.display.get_surface()
display_surface.blit(pygame.transform.flip(display_surface, False, True), dest=(0, 0))

You can do the same thing horizontally top/bottom-right. The important methods are documented here:

于 2020-02-22T19:58:24.713 回答