|
1 | | -import sys |
2 | | -import sdl2 |
3 | | -import sdl2.ext |
4 | | - |
5 | | -# Create a resource container, so that we can easily access all |
6 | | -# resource, we bundle with our application. We are using the current |
7 | | -# file's location and define the "resources" subdirectory as the |
8 | | -# location, in which we keep all data. |
9 | | -RESOURCES = sdl2.ext.Resources(__file__, "resources") |
10 | | - |
11 | | -def run(): |
12 | | - # Initialize the video subsystem, create a window and make it visible. |
13 | | - sdl2.ext.init() |
14 | | - window = sdl2.ext.Window("Sprite Transformations", size=(800, 600)) |
15 | | - window.show() |
16 | | - |
17 | | - # Create a hardware-accelerated sprite factory. The sprite factory requires |
18 | | - # a rendering context, which enables it to create the underlying textures |
19 | | - # that serve as the visual parts for the sprites. |
20 | | - renderer = sdl2.ext.Renderer(window) |
21 | | - factory = sdl2.ext.SpriteFactory(sdl2.ext.TEXTURE, renderer=renderer) |
22 | | - |
23 | | - # Create a simple rendering system for the window. We will use it to |
24 | | - # display the sprites. |
25 | | - rendersystem = factory.create_sprite_render_system(window) |
26 | | - |
27 | | - # Create the sprite to display. |
28 | | - sprite = factory.from_image(RESOURCES.get_path("hello.bmp")) |
29 | | - |
30 | | - # Use the sprite.center tuple to change the center of the sprite for |
31 | | - # rotation. You can reset a changed center simply by assinging None to it. |
32 | | - # |
33 | | - # sprite.center = 10, 30 # Changes the center |
34 | | - # sprite.center = None # Resets the center |
35 | | - |
36 | | - running = True |
37 | | - while running: |
38 | | - events = sdl2.ext.get_events() |
39 | | - for event in events: |
40 | | - if event.type == sdl2.SDL_QUIT: |
41 | | - running = False |
42 | | - break |
43 | | - elif event.type == sdl2.SDL_KEYDOWN: |
44 | | - # Flip the sprite over its vertical axis on pressing down or up |
45 | | - if event.key.keysym.sym in (sdl2.SDLK_DOWN, sdl2.SDLK_UP): |
46 | | - sprite.flip ^= sdl2.SDL_FLIP_VERTICAL |
47 | | - # Flip the sprite over its horizontal axis on pressing left or |
48 | | - # right |
49 | | - elif event.key.keysym.sym in (sdl2.SDLK_LEFT, sdl2.SDLK_RIGHT): |
50 | | - sprite.flip ^= sdl2.SDL_FLIP_HORIZONTAL |
51 | | - # Rotate the sprite around its center on pressing plus or |
52 | | - # minus. The center can be changed via sprite.center. |
53 | | - elif event.key.keysym.sym == sdl2.SDLK_PLUS: |
54 | | - sprite.angle += 1.0 |
55 | | - if sprite.angle >= 360.0: |
56 | | - sprite.angle = 0.0 |
57 | | - elif event.key.keysym.sym == sdl2.SDLK_MINUS: |
58 | | - sprite.angle -= 1.0 |
59 | | - if sprite.angle <= 0.0: |
60 | | - sprite.angle = 360.0 |
61 | | - renderer.clear() |
62 | | - rendersystem.render(sprite, 100, 75) |
63 | | - sdl2.SDL_Delay(10) |
64 | | - sdl2.ext.quit() |
65 | | - return 0 |
66 | | - |
67 | | -if __name__ == "__main__": |
68 | | - sys.exit(run()) |
| 1 | +import sys |
| 2 | +import sdl2 |
| 3 | +import sdl2.ext |
| 4 | + |
| 5 | +# Create a resource container, so that we can easily access all |
| 6 | +# resource, we bundle with our application. We are using the current |
| 7 | +# file's location and define the "resources" subdirectory as the |
| 8 | +# location, in which we keep all data. |
| 9 | +RESOURCES = sdl2.ext.Resources(__file__, "resources") |
| 10 | + |
| 11 | +def run(): |
| 12 | + # Initialize the video subsystem, create a window and make it visible. |
| 13 | + sdl2.ext.init() |
| 14 | + window = sdl2.ext.Window("Sprite Transformations", size=(800, 600)) |
| 15 | + window.show() |
| 16 | + |
| 17 | + # Create a hardware-accelerated sprite factory. The sprite factory requires |
| 18 | + # a rendering context, which enables it to create the underlying textures |
| 19 | + # that serve as the visual parts for the sprites. |
| 20 | + renderer = sdl2.ext.Renderer(window) |
| 21 | + factory = sdl2.ext.SpriteFactory(sdl2.ext.TEXTURE, renderer=renderer) |
| 22 | + |
| 23 | + # Create a simple rendering system for the window. We will use it to |
| 24 | + # display the sprites. |
| 25 | + rendersystem = factory.create_sprite_render_system(window) |
| 26 | + |
| 27 | + # Create the sprite to display. |
| 28 | + sprite = factory.from_image(RESOURCES.get_path("hello.bmp")) |
| 29 | + |
| 30 | + # Use the sprite.center tuple to change the center of the sprite for |
| 31 | + # rotation. You can reset a changed center simply by assinging None to it. |
| 32 | + # |
| 33 | + # sprite.center = 10, 30 # Changes the center |
| 34 | + # sprite.center = None # Resets the center |
| 35 | + |
| 36 | + running = True |
| 37 | + while running: |
| 38 | + events = sdl2.ext.get_events() |
| 39 | + for event in events: |
| 40 | + if event.type == sdl2.SDL_QUIT: |
| 41 | + running = False |
| 42 | + break |
| 43 | + elif event.type == sdl2.SDL_KEYDOWN: |
| 44 | + # Flip the sprite over its vertical axis on pressing down or up |
| 45 | + if event.key.keysym.sym in (sdl2.SDLK_DOWN, sdl2.SDLK_UP): |
| 46 | + sprite.flip ^= sdl2.SDL_FLIP_VERTICAL |
| 47 | + # Flip the sprite over its horizontal axis on pressing left or |
| 48 | + # right |
| 49 | + elif event.key.keysym.sym in (sdl2.SDLK_LEFT, sdl2.SDLK_RIGHT): |
| 50 | + sprite.flip ^= sdl2.SDL_FLIP_HORIZONTAL |
| 51 | + # Rotate the sprite around its center on pressing plus or |
| 52 | + # minus. The center can be changed via sprite.center. |
| 53 | + elif event.key.keysym.sym == sdl2.SDLK_PLUS: |
| 54 | + sprite.angle += 1.0 |
| 55 | + if sprite.angle >= 360.0: |
| 56 | + sprite.angle = 0.0 |
| 57 | + elif event.key.keysym.sym == sdl2.SDLK_MINUS: |
| 58 | + sprite.angle -= 1.0 |
| 59 | + if sprite.angle <= 0.0: |
| 60 | + sprite.angle = 360.0 |
| 61 | + renderer.clear() |
| 62 | + rendersystem.render(sprite, 100, 75) |
| 63 | + sdl2.SDL_Delay(10) |
| 64 | + sdl2.ext.quit() |
| 65 | + return 0 |
| 66 | + |
| 67 | +if __name__ == "__main__": |
| 68 | + sys.exit(run()) |
0 commit comments