I am doing some operations with vectors and physics in PyGame and the default coordinate system is inconvenient for me. Normally the (0, 0)
point is at the top-
Unfortunately, pygame does not provide any such functionality. The simplest way to do it would be to have a function to convert coordinates, and use it just before drawing any object.
def to_pygame(coords, height):
"""Convert coordinates into pygame coordinates (lower-left => top left)."""
return (coords[0], height - coords[1])
This will take your coordinates and convert them into pygame's coordinates for drawing, given height
, the height of the window, and coords
, the top left corner of an object.
To instead use the bottom left corner of the object, you can take the above formula, and subtract the object's height:
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)
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: