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.
23 lines
913 B
23 lines
913 B
import tkinter as tk |
|
import itertools |
|
|
|
class AnimatedSprite: |
|
def __init__(self, path, sprite_size): |
|
self.frames = [] |
|
self.sprite_size = sprite_size # Size of each sprite in the sheet |
|
self.load_frames(path) |
|
self.index = itertools.cycle(range(len(self.frames))) |
|
|
|
def load_frames(self, path): |
|
spritesheet = tk.PhotoImage(file=path) |
|
spritesheet_width = spritesheet.width() |
|
spritesheet_height = spritesheet.height() |
|
|
|
for y in range(0, spritesheet_height, self.sprite_size[1]): |
|
for x in range(0, spritesheet_width, self.sprite_size[0]): |
|
frame = spritesheet.subimage(x, y, x + self.sprite_size[0], y + self.sprite_size[1]) |
|
resized_frame = frame.subsample(1) # Resize image to half |
|
self.frames.append(resized_frame) |
|
|
|
def next_frame(self): |
|
return self.frames[next(self.index)] |