Change the position of the origin in PyGame coordinate system

前端 未结 2 544
无人及你
无人及你 2020-12-18 06:54

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-

相关标签:
2条回答
  • 2020-12-18 07:33

    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)
    
    0 讨论(0)
  • 2020-12-18 07:41

    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:

    • pygame.display.get_surface()
    • pygame.transform.flip(Surface, xbool, ybool)
    • Surface.blit(Surface, dest)
    0 讨论(0)
提交回复
热议问题