python - 如何从重叠的形状中获取输出? Python 3.5 Tkinter

标签 python canvas tkinter

我正在尝试使用 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/

相关文章:

python - 溢出错误 : user id is too big

python - 如何杀死多进程中的所有 Pool worker?

javascript - 尝试从点击事件coffeescript中调用 'this'

java - HTML5(canvas + JavaScript)中是否有等效的graphstream(Java)

python - 为 ffdshow 制作一个 python gui

python - 无法重建分解图像

python - 使用 self 时缺少 1 个必需的位置参数

javascript - d3.js 的拖动问题

python - Tkinter 将文本调整为内容

python - Tkinter - 如何更改默认笔记本边框颜色?