在Tkinter中使用Spritesheets

时间:2013-05-16 05:36:10

标签: python tkinter sprite-sheet

我在Python的Tkinter中编写了一个GUI,我找不到如何使用canvas的create_image方法只从spritesheet中绘制一个sprite。提前感谢任何能告诉我我需要做什么的人!

2 个答案:

答案 0 :(得分:5)

首先,我强烈建议您使用Pygame,因为它有concrete module用于此目的,而PhotoImage类需要保留对每个图像的引用以避免被垃圾收集(有时是有点棘手)。

话虽如此,这是一个如何使用Tkinter绘制单个精灵的示例(我在此示例中使用的spritesheet是this one,转换为GIF文件)。

import Tkinter as tk

class App(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.spritesheet = tk.PhotoImage(file="spritesheet.gif")
        self.num_sprintes = 4
        self.last_img = None
        self.images = [self.subimage(32*i, 0, 32*(i+1), 48) for i in range(self.num_sprintes)]
        self.canvas = tk.Canvas(self, width=100, height=100)
        self.canvas.pack()
        self.updateimage(0)

    def subimage(self, l, t, r, b):
        print(l,t,r,b)
        dst = tk.PhotoImage()
        dst.tk.call(dst, 'copy', self.spritesheet, '-from', l, t, r, b, '-to', 0, 0)
        return dst

    def updateimage(self, sprite):
        self.canvas.delete(self.last_img)
        self.last_img = self.canvas.create_image(16, 24, image=self.images[sprite])
        self.after(100, self.updateimage, (sprite+1) % self.num_sprintes)

app = App()
app.mainloop()

答案 1 :(得分:0)

你有几个选择:

Tkinter仅支持3种文件格式:GIF,PGM和PPM。 您需要将文件转换为.GIF然后加载它们 您可以使用Python Imaging Library(PIL)及其tkinter扩展来使用PNG图像。< / p>

您可以在此处下载PIL包: http://www.pythonware.com/products/pil/

或者,如上所述,PyGame更好地内置了对图像的支持,可能更容易使用。

祝你好运!