2016-07-04 52 views
0

我想在Tkinter中创建一个可移动的精灵;它的工作原理,但我不确定绑定一个Canvas是最好的解决方案。按“w”后会出现延迟,例如,角色移动一次,停止几秒钟,然后开始移动一点点。Tkinter平滑运动?

代码:

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() 

我的问题是,如何删除刚才提到的延迟,使运动更流畅一点?

在此先感谢。

回答

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()