使用Tkinter进行平滑移动?

时间:2016-07-04 01:16:10

标签: python tkinter

我试图在Tkinter制作一个可移动的精灵;它有效,但我不确定绑定Canvas是最好的解决方案。按下" w"后有一段延迟,例如,角色移动一次,停止几秒钟,然后开始有点懒散。

代码:

import Tkinter as t

tk = t.Tk()
w = t.Button()
c = t.Canvas(tk, bg = "#000000", bd = 3)
x = 20
y = 20

img = t.PhotoImage(file = "hi.png")
c.create_image(x, y, image = img)
coord = 10, 50, 240, 210

def clearboard():
    c.delete("all");


def key(event):
    global y
    global x
    pr = event.char
    if(pr is "w"):
        y -= 5
    if(pr is "s"):
        y += 5
    if(pr is "a"):
        x -= 5
    if(pr is "d"):
        x += 5
    c.delete("all");
    c.create_image(x, y, image = img)



w = t.Button(tk, command = clearboard, activebackground = "#000000", activeforeground = "#FFFFFF", bd = 3, fg = "#000000", bg = "#FFFFFF", text = "Clear", relief="groove")


c.focus_set()
c.bind("<Key>", key)

w.pack()
c.pack()
tk.mainloop()

我的问题是,如何删除前面提到的延迟并使运动更平滑?

提前致谢。

1 个答案:

答案 0 :(得分:2)

好吧,我找到了一个问题的答案。我刚刚创建了一个游戏循环并添加了velx变量,并添加了<KeyPress><KeyRelease>的绑定。

代码:

import Tkinter as t

tk = t.Tk()
w = t.Button()
c = t.Canvas(tk, bg = "#000000", bd = 3, width = 480, height = 360)
velx = 0
x = 240
img = t.PhotoImage(file = "hi.png")
c.create_image(x, 200, image = img)

def move():
    global x
    c.delete("all");
    x += velx;
    c.create_image(x, 200, image = img)
    tk.after(10, move)

def clearboard():
    c.delete("all");


def key_press(event):
    global velx
    pr = event.char
    if(pr is "a"):
        velx = -5
    if(pr is "d"):
        velx = 5


def key_release(event):
    global velx
    velx = 0


w = t.Button(tk, command = clearboard, activebackground = "#000000", activeforeground = "#FFFFFF", bd = 3, fg = "#000000", bg = "#FFFFFF", text = "Clear", relief="groove")


c.focus_set()
c.bind("<KeyPress>", key_press)
c.bind("<KeyRelease>", key_release)

move()
w.pack()
c.pack()
tk.mainloop()
相关问题