Python Forum
[PyGame] How to rotate images
Thread Rating:
  • 4 Vote(s) - 4 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[PyGame] How to rotate images
#10
Or you can remove the while loop altogether :p

In a recent project, I took all the constructor/destructor pygame nonsense and threw them into a context manager that offers the pygame events as a generator.  Could be useful if you're into that sort of thing.  Personally, I think it looks a lot cleaner.
import pygame

class Renderer(object):
    def __init__(self, resolution, clock_speed=60):
        self.resolution = resolution
        self.clock_speed = clock_speed
        self.screen = pygame.display.set_mode(self.resolution)
        self.clock = pygame.time.Clock()
        self.objects = []
        
    def add(self, renderable):
        self.objects.append(renderable)
    
    def clear(self):
        self.screen.fill(WHITE)
        
    def update(self):
        for obj in self.objects:
            self.screen.blit(*obj.render())
            
        pygame.display.flip()
        self.clock.tick()

class GUI(object):
    def __init__(self, renderer):
        self.renderer = renderer
    
    def event_loop(self):
        running = True
        while running:
            self.renderer.clear()
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    running = False
                yield event
            self.renderer.update()
    
    def __enter__(self):
        pygame.init()
        return self
        
    def __exit__(self, *args):
        pygame.quit()

if __name__ == '__main__':
    win_size = (500, 500)
    renderer = Renderer(win_size, 60)

    # use renderer.add() to add objects with a "render" method
    # each clock tick, the render() method will be called on those objects
    # that render() method returns a tuple of (surface_to_blit, (top_left_xpos, top_left_ypos))

    with GUI(renderer) as g:
        for event in g.event_loop():
        # event is any pygame event, INCLUDING QUIT, so you can clean up
        # quit is auto-handled by the generator/context manager

            mouse_down = pygame.mouse.get_pressed()[0]
            mouse_pos = pygame.mouse.get_pos()
            # ...then you do things
            [button.update(mouse_down, mouse_pos[0], mouse_pos[1]) for button in buttons]
Reply


Messages In This Thread
How to rotate images - by LavaCreeperKing - Nov-06-2016, 05:40 PM
RE: How to rotate images - by metulburr - Nov-06-2016, 06:42 PM
RE: How to rotate images - by LavaCreeperKing - Nov-06-2016, 09:38 PM
RE: How to rotate images - by LavaCreeperKing - Nov-26-2016, 10:19 PM
RE: How to rotate images - by nilamo - Nov-28-2016, 08:18 PM
RE: How to rotate images - by LavaCreeperKing - Nov-28-2016, 10:16 PM
RE: How to rotate images - by nilamo - Nov-28-2016, 10:25 PM
RE: How to rotate images - by metulburr - Nov-29-2016, 01:01 PM
RE: How to rotate images - by LavaCreeperKing - Nov-29-2016, 07:34 PM
RE: How to rotate images - by nilamo - Nov-29-2016, 10:26 PM
RE: How to rotate images - by stuckbunny - Jan-02-2020, 08:47 PM
RE: How to rotate images - by michael1789 - Jan-02-2020, 10:36 PM
RE: How to rotate images - by metulburr - Jan-04-2020, 04:21 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  How do I use pygame.transform.rotate()? noodlespinbot 1 2,903 Mar-05-2020, 08:08 AM
Last Post: michael1789

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020