def moveR(amount):
global x
global y
x = x+amount
can.itemconfig(player, image = playerImageL)
can.move("player", x, y)
root.update()
##SETTING##
can = Canvas(width = 850, height = 550, bg = "black")
can.pack(expand = YES, fill = BOTH)
player = can.create_image(x, y, image = playerImageL, anchor = NW)
root.update()
嘿,我正在尝试使用tkinter和canvas创建一个迷你游戏但是移动命令不起作用。如您所见,SETTING是稍后在我调用的代码
中的设置moveR(100)
然而它不起作用,似乎完全破坏了我的精灵/图像。
答案 0 :(得分:2)
文字"player"
和变量player
是两回事。
在player
move()
can.move(player, x, y)
顺便说一句:你不需要itemconfig()
答案 1 :(得分:1)
请阅读https://stackoverflow.com/help/mcve。要使代码易于验证,请使用矩形而不是图像。 (对于任何项目,您的代码都会失败。)
Canvas.move(item, delta_x, delta_y)
将项目移动给定的x和y金额。它执行x + dy计算本身,所以你不应该这样做。如果要移动到给定位置,请使用Canvas.coords(item, x0, y0, x1, y1)
。如果新边界框的大小与其不同,它也会改变形状。以下示例使用这两种方法。作为奖励,它还显示了如何使用root.after
进行重复更改。
import tkinter as tk
root = tk.Tk()
can = tk.Canvas(root, width=800, height=500)
can.pack()
rec = can.create_rectangle(0, 0, 100, 100, fill='red')
def rmove():
box = can.bbox(rec)
if box[0] < 700:
can.move(rec, 100, 30)
root.after(1000, rmove)
else:
can.coords(rec, 0, 400, 50, 500) # position with new shape
root.after(1000, rmove)
root.mainloop()