pythonrotationpygamerectangles

Rotating a rectangle (not image) in pygame


In pygame I use pygame.draw.rect(screen, color, rectangle) for all the rectangles in my program. I want to be able to rotate these rectangles to any angle. I have seen the following code to rotate IMAGES but my question is with RECTANGLES.

pygame.transform.rotate(image, angle)

But I am working with rectangles, I don't have an image or "surface" that I can rotate. When I try to rotate a rectangle with

rect = pygame.draw.rect(screen, self.color, self.get_rectang())
rotatedRect = pygame.transform.rotate(rect, self.rotation)
screen.blit(rotatedRect)

This gives TypeError: must be pygame.Surface, not pygame.Rect on the line with .rotate()

My question is, how can I rotate a and display a RECTANGLE(x,y,w,h), not an image, in pygame.

The linked post that this is a "potential duplicate" of is not a duplicate. One answer explains about the consequences of rotating a rectangle and the other uses code for rotating an image.


Solution

  • See the second answer here: Rotating a point about another point (2D)

    I think rectangles can only be horiz or vertical in their oreintation. You need to define the corners and rotate them and then draw and fill between them.

    The other way is to make a class

    class myRect(pygame.Surface):
        def __init__(self, parent, xpos, ypos, width, height):
          super(myRect, self).__init__(width, height)
          self.xpos = xpos
          self.ypos = ypos
          self.parent = parent
    
        def update(self, parent):
          parent.blit(self, (self.xpos, self.ypos))
    
        def rotate(self, angle):
          #(your rotation code goes here)
    

    and use that instead, as then you will be able to rotate it using the transform function.