from Tkinter import *
import random
root = Tk()
width = 700
height = 600
canvas = Canvas(root, width = width, height = height, bg = "light blue")
canvas.pack()
pipes = []
class NewPipe:
def __init__(self, pipe_pos, pipe_hole):
self.pipe_pos = list(pipe_pos)
def update(self):
self.pipe_pos[0] -= 3
self.pipe_pos[2] -= 3
def draw(self):
canvas.create_rectangle(self.pipe_pos, fill = "green")
def get_pos(self):
return self.pipe_pos
def generate_pipe():
pipe_hole = random.randrange(0, height)
pipe_pos = [width - 100, 0, width, pipe_hole]
pipes.append(NewPipe(pipe_pos, pipe_hole))
draw_items()
canvas.after(2000, generate_pipe)
def draw_items():
for pipe in pipes:
if pipe.get_pos()[2] <= 0 - 5:
pipes.remove(pipe)
else:
pipe.draw()
pipe.update()
canvas.after(100, draw_items)
def jump(press):
pass
canvas.bind("<Button-1>", jump)
canvas.after(2000, generate_pipe)
draw_items()
mainloop()
现在我正在尝试制作一个游戏,你必须躲避矩形,这是管道。它基本上是Flappy Bird,但在Tkinter上。在这段代码中,我试图生成管道并移动它们,但我之前绘制的管道不会离开,它们只是留在那里。这意味着当管道移动时,它所处的位置不会改变,并且该形状保持在那里。有没有办法删除过去的形状,或其他方式来移动它们?
答案 0 :(得分:2)
canvas.create_rectangle(self.pipe_pos, fill = "green")
会返回一个ID。
您可以使用此ID将其添加到
等方法中canvas.coords
canvas.delete
canvas.itemconfigure
canvas.scale
canvas.type
...
查看help(canvas)
。
画布不是框架缓冲区,您可以在其上绘制一帧的内容。绘制的东西不会消失,您可以移动它并更改创建时可以使用的所有参数。