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