Python-球作为同一对象的实例相互反弹 Python-球作为同一对象的一部分相互反弹

Python-球作为同一对象的实例相互反弹 Python-球作为同一对象的一部分相互反弹,python,python-3.x,tkinter,collision-detection,Python,Python 3.x,Tkinter,Collision Detection,我想做一个程序,让多个球沿着一条数字线向不同的方向移动。该程序的目的是让球在相互碰撞或与数字线末端碰撞时改变方向。我用一个物体做了多个球,这样每个球都有自己的颜色和方向(所有球的速度都一样)。我现在被困在检测一个球何时与另一个球碰撞,并让它们改变方向。如果它们是同一个对象的一部分,我如何检测碰撞,可能吗?谢谢你的帮助 from tkinter import * import time tk = Tk() canvas = Canvas(tk, width=2200, heig

我想做一个程序,让多个球沿着一条数字线向不同的方向移动。该程序的目的是让球在相互碰撞或与数字线末端碰撞时改变方向。我用一个物体做了多个球,这样每个球都有自己的颜色和方向(所有球的速度都一样)。我现在被困在检测一个球何时与另一个球碰撞,并让它们改变方向。如果它们是同一个对象的一部分,我如何检测碰撞,可能吗?谢谢你的帮助

    from tkinter import *
import time

tk = Tk()    

canvas = Canvas(tk, width=2200, height=600)
tk.title("Balls")
canvas.pack()

def base():
    canvas.create_line(50,400,2050,400)# number line
    for i in range(101):
        canvas.create_line(50+(i*20), 400, 50+(i*20), 390) # number ticks
        canvas.create_text(50+(i*20), 410, fill="darkblue", font="Times 8 italic bold", text=i) # the actual numbers
base()

class Ball:
    def __init__(self, start, color, direction):
        self.shape = canvas.create_oval((start*20) + 40, 390,(start*20) + 60, 370, fill=color)
        self.x = 20*direction
        self.y = 0

    def move(self):
        canvas.move(self.shape, self.x, self.y)
        pos = canvas.coords(self.shape) # pos = [left, top, right, bottom]
        if pos[2] >= 'another ball' or pos[0] <= 'another ball':   # idk how to make the balls detect each other here....
            self.x = -self.x            # delete the if statement and this line for program to work



colors = ['red','green','blue','orange','yellow','cyan','magenta',
          'turquoise','grey','gold','pink']
startPos = [24,52,60,84]
direction = [1,-1,1,-1]
balls = []

for i in range(4):
    balls.append(Ball(startPos[i],colors[i],direction[i]))


while True:
    for ball in balls:
        ball.move()
    tk.update()
    time.sleep(0.5)


tk.mainloop()
从tkinter导入*
导入时间
tk=tk()
画布=画布(tk,宽度=2200,高度=600)
标题(“球”)
canvas.pack()
def base():
画布。创建线(504002050400)#编号线
对于范围(101)内的i:
画布。创建线(50+(i*20)、400、50+(i*20)、390)#数字记号
画布。创建#文本(50+(i*20),410,fill=“darkblue”,font=“Times 8 italic bold”,text=i)#实际数字
base()
班级舞会:
定义初始(自我、开始、颜色、方向):
self.shape=canvas.create_oval((开始*20)+40390,(开始*20)+60370,fill=color)
自身x=20*方向
self.y=0
def移动(自我):
canvas.move(self.shape、self.x、self.y)
pos=canvas.coords(self.shape)#pos=[左、上、右、下]

如果位置[2]>=“另一个球”或位置[0],它们如何成为同一对象的一部分?您已经清楚地声明了四个对象,并将它们附加到关于碰撞的
球中
——只需考虑中心距离和半径。除了检测碰撞之外,您可能还需要在之后正确计算新的二维速度。提示:画布有一个用于查找被另一个对象重叠的对象的命令:它们是同一个对象的一部分吗?您已经清楚地声明了四个对象,并将它们附加到关于碰撞的
球中
——只需考虑中心距离和半径。除了检测碰撞之外,您可能还需要在之后正确计算新的二维速度。提示:画布有一个用于查找被另一个对象重叠的对象的命令: