1#!/usr/bin/env python
2""" pygame.examples.sprite_texture
3
4Experimental! Uses APIs which may disapear in the next release (_sdl2 is private).
5
6
7Hardware accelerated Image objects with pygame.sprite.
8
9_sdl2.video.Image is a backwards compatible way with to use Texture with
10pygame.sprite groups.
11"""
12import os
13import pygame as pg
14
15if pg.get_sdl_version()[0] < 2:
16    raise SystemExit("This example requires pygame 2 and SDL2.")
17from pygame._sdl2 import Window, Texture, Image, Renderer
18
19
20data_dir = os.path.join(os.path.split(os.path.abspath(__file__))[0], "data")
21
22
23def load_img(file):
24    return pg.image.load(os.path.join(data_dir, file))
25
26
27pg.display.init()
28pg.key.set_repeat(10, 10)
29
30win = Window("asdf", resizable=True)
31renderer = Renderer(win)
32tex = Texture.from_surface(renderer, load_img("alien1.gif"))
33
34
35class Something(pg.sprite.Sprite):
36    def __init__(self, img):
37        pg.sprite.Sprite.__init__(self)
38
39        self.rect = img.get_rect()
40        self.image = img
41
42        self.rect.w *= 5
43        self.rect.h *= 5
44
45        img.origin = self.rect.w / 2, self.rect.h / 2
46
47
48sprite = Something(Image(tex, (0, 0, tex.width / 2, tex.height / 2)))
49sprite.rect.x = 250
50sprite.rect.y = 50
51
52# sprite2 = Something(Image(sprite.image))
53sprite2 = Something(Image(tex))
54sprite2.rect.x = 250
55sprite2.rect.y = 250
56sprite2.rect.w /= 2
57sprite2.rect.h /= 2
58
59group = pg.sprite.Group()
60group.add(sprite2)
61group.add(sprite)
62
63import math
64
65t = 0
66running = True
67clock = pg.time.Clock()
68renderer.draw_color = (255, 0, 0, 255)
69
70while running:
71    for event in pg.event.get():
72        if event.type == pg.QUIT:
73            running = False
74        elif event.type == pg.KEYDOWN:
75            if event.key == pg.K_ESCAPE:
76                running = False
77            elif event.key == pg.K_LEFT:
78                sprite.rect.x -= 5
79            elif event.key == pg.K_RIGHT:
80                sprite.rect.x += 5
81            elif event.key == pg.K_DOWN:
82                sprite.rect.y += 5
83            elif event.key == pg.K_UP:
84                sprite.rect.y -= 5
85
86    renderer.clear()
87    t += 1
88
89    img = sprite.image
90    img.angle += 1
91    img.flipX = t % 50 < 25
92    img.flipY = t % 100 < 50
93    img.color[0] = int(255.0 * (0.5 + math.sin(0.5 * t + 10.0) / 2.0))
94    img.alpha = int(255.0 * (0.5 + math.sin(0.1 * t) / 2.0))
95    # img.draw(dstrect=(x, y, 5 * img.srcrect['w'], 5 * img.srcrect['h']))
96
97    group.draw(renderer)
98
99    renderer.present()
100
101    clock.tick(60)
102    win.title = str("FPS: {}".format(clock.get_fps()))
103
104pg.quit()
105