【发布时间】:2020-02-23 03:58:24
【问题描述】:
我正在 PyGame 中对向量和物理进行一些操作,默认坐标系对我来说很不方便。通常(0, 0) 点位于左上角,但我宁愿原点位于左下角。我宁愿改变坐标系,也不愿转换我必须绘制的每一件事。
是否可以改变 PyGame 中的坐标系使其像这样工作?
【问题讨论】:
标签: python coordinates pygame
我正在 PyGame 中对向量和物理进行一些操作,默认坐标系对我来说很不方便。通常(0, 0) 点位于左上角,但我宁愿原点位于左下角。我宁愿改变坐标系,也不愿转换我必须绘制的每一件事。
是否可以改变 PyGame 中的坐标系使其像这样工作?
【问题讨论】:
标签: python coordinates pygame
不幸的是,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)
【讨论】:
如果您尝试渲染的对象是垂直对称的(如矩形),您只需翻转屏幕以使坐标系位于左下角,如下所示:
display_surface = pygame.display.get_surface()
display_surface.blit(pygame.transform.flip(display_surface, False, True), dest=(0, 0))
您可以在水平顶部/右下角做同样的事情。此处记录了重要的方法:
【讨论】: