You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
1.4 KiB
34 lines
1.4 KiB
import pygame
|
|
|
|
class SquareSpriteSheet():
|
|
def __init__(self, filename, size, numberOfImages, transparency_color=(0,0,0)) -> None:
|
|
self.sheet = pygame.image.load(filename).convert_alpha()
|
|
self.size = size
|
|
self.numberOfImages = numberOfImages
|
|
self.transparency_color = transparency_color
|
|
self.images = []
|
|
|
|
self.load_images()
|
|
|
|
def load_images(self):
|
|
for i in range(self.numberOfImages):
|
|
image = pygame.Surface((self.size, self.size)).convert_alpha()
|
|
image.blit(self.sheet, (0,0), ((i * self.size), 0, self.size, self.size))
|
|
image.set_colorkey(self.transparency_color)
|
|
self.images.append(image)
|
|
|
|
def get_image_by_frame(self, frame, scale=1, angle=0):
|
|
image = self.images[frame]
|
|
image = pygame.transform.scale(image, (self.size * scale, self.size * scale))
|
|
image = self.rot_center(image, angle)
|
|
image.set_colorkey(self.transparency_color)
|
|
return image
|
|
|
|
def rot_center(self, image, angle):
|
|
"""rotate an image while keeping its center and size"""
|
|
orig_rect = image.get_rect()
|
|
rot_image = pygame.transform.rotate(image, angle)
|
|
rot_rect = orig_rect.copy()
|
|
rot_rect.center = rot_image.get_rect().center
|
|
rot_image = rot_image.subsurface(rot_rect).copy()
|
|
return rot_image |