帆布。快走没有

2024-05-12 09:40:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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创建一个小游戏,但是move命令不起作用。如您所见,设置是稍后我调用的代码中的设置

^{pr2}$

但它不起作用,似乎完全毁了我的精灵/形象。在


Tags: imagemovedefupdaterootwidthamountglobal
2条回答

请阅读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()

文本"player"和变量{}是两个不同的东西。在

move()中使用变量player

can.move(player, x, y)

顺便说一句:你不需要itemconfig()

相关问题 更多 >