我正在尝试使用 tkinter 在 python 中制作一个类似于 Block Dodger 的游戏。 我想做的是当一个矩形接触另一个矩形时进行输出。我找到了与我的问题类似的答案,但它没有解释要做什么以及如何使用该命令。这是我的代码:
from tkinter import *
def change_coord(event):
if event.keysym == 'Right':
canvas.move(a, 20,0)
if event.keysym == 'Left':
canvas.move(a, -20,0)
def tet1():
canvas.move(b, 0, 30)
root.after(250, tet1)
def tet2():
canvas.move(c, 0, 20)
root.after(250, tet2)
def tet3():
canvas.move(d, 0, 50)
root.after(250, tet3)
root = Tk()
canvas = Canvas(root, width=1000, height=5000, bg='white')
canvas.pack(pady=0)
a = canvas.create_rectangle(0, 0, 100, 100, fill='red')
b = canvas.create_rectangle(0, 0, 100, 100, fill='blue')
c = canvas.create_rectangle(0, 0, 100, 100, fill='blue')
d = canvas.create_rectangle(0, 0, 100, 100, fill='blue')
canvas.move(a, 450, 850)
canvas.move(c, 450, 0)
canvas.move(d, 675, 0)
canvas.bind("<Motion>", change_coord)
root.bind_all('<Left>', change_coord)
root.bind_all('<Right>', change_coord)
tet1()
root.after(200, tet2)
root.after(2000, tet3)
root.mainloop()
我不确定如何做到这一点,所以我希望得到一些帮助。谢谢 :) - jack
最佳答案
要检查a
是否与任何对象重叠,您可以获取a
坐标并与find_overlapping()
一起使用。它为您提供重叠 a
def check_collision():
x1, y1, x2, y2 = canvas.coords(a)
result = canvas.find_overlapping(x1, y1, x2, y2)
if b in result:
print('b overlaps a')
if c in result:
print('c overlaps a')
if d in result:
print('d overlaps a')
root.after(250, check_collision)
您可以使用 after()
运行它
或者您可以分别对每个对象使用 find_overlapping
- 然后您可以停止对象并从 Canvas 中删除。
def tet1():
canvas.move(b, 0, 30)
x1, y1, x2, y2 = canvas.coords(b)
result = canvas.find_overlapping(x1, y1, x2, y2)
if a in result:
print('b overlaps a')
canvas.delete(b)
else:
root.after(250, tet1)
关于python - 如何从重叠的形状中获取输出? Python 3.5 Tkinter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41779851/