Home > OS >  How do you rotate an image in Pygame without constantly redrawing the background?
How do you rotate an image in Pygame without constantly redrawing the background?

Time:06-11

I am making a randomized spinner in pygame, but the only method I've found is to constantly redraw the whole screen. Is there a way that doesn't use this, it becomes extremely laggy.

CodePudding user response:

You can not. why do you want that? It is common to redraw the entire scene in each frame. Of course you can try to redraw just a rectangular section of the background. However, this is usually not worth the effort.

The pygame way to do this is to pass a list of rectangular areas to pygame.display.update(). If rectangles are passed to pygame.display.update() then not the entire display will be redrawn, just the specified areas::

Update portions of the screen for software displays
[...] You can pass the function a single rectangle, or a sequence of rectangles. It is more efficient to pass many rectangles at once than to call update multiple times with single or a partial list of rectangles.

e.g.:

while run:
    # [...]

    screen.blit(background, (0, 0))    

    screen.blit(image1, bounding_rect1)
    screen.blit(image2, bounding_rect2)
  
    pygame.display.update([bounding_rect1, bounding_rect2])

CodePudding user response:

That is how computer animation works, you're redrawing the screen on every frame. Every game practically works the same way. I am not sure what graphics pipeline pygame uses but in OpenGL you usually initialize all your geometry outside of the render loop and then use pointers to batch-process everything in the render-loop so you're not duplicating a lot of boilerplate code or making duplicate objects every frame.

A related question has been answered here: https://gamedev.stackexchange.com/questions/125546/what-is-the-best-way-to-handle-the-actual-render-loop

  • Related