Python:如何在Tkinter中检测可见形状检测
我是Python新手,我有一个程序有两个类,一个基本上是矩形,另一个基本上是圆形。我正在使用Python:如何在Tkinter中检测可见形状检测,python,canvas,tkinter,collision-detection,Python,Canvas,Tkinter,Collision Detection,我是Python新手,我有一个程序有两个类,一个基本上是矩形,另一个基本上是圆形。我正在使用Tkinter中的Canvas以以下方式绘制它们: def draw(self): self.canvas.delete("all") self.rect.draw(self.canvas) self.ball.draw(self.canvas) Ball类有其位置变量和直径变量,Rect类有其位置变量和尺寸变量 我想知道我如何检测这两个“形状”之间的碰撞。我知道其中一个是将球视
Tkinter
中的Canvas
以以下方式绘制它们:
def draw(self):
self.canvas.delete("all")
self.rect.draw(self.canvas)
self.ball.draw(self.canvas)
Ball
类有其位置变量和直径变量,Rect
类有其位置变量和尺寸变量
我想知道我如何检测这两个“形状”之间的碰撞。我知道其中一个是将球视为正方形,并进行基本的矩形碰撞,但我想知道如何精确
我还想知道Python中是否有类似于Java中形状碰撞的方式。在我的Java游戏中,我使用以下代码检测任意两个形状之间的碰撞:
public boolean collisionCheck(Shape a, Shape b) {
Area aA = new Area(a);
Area aB = new Area(b);
aA.intersect(aB);
return !aA.isEmpty();
}
Python中有类似于这个简单解决方案的东西吗?
若并没有,我将如何在Python中处理圆-矩形碰撞
感谢您的帮助我使用了Tkinter
的Canvas
对象所拥有的方法设法解决了这个问题。每次使用Canvas
绘制某个对象时,都会给它一个ID。因此,只要您在某处记录该ID,您就可以使用Canvas
对象具有的find\u overlapping
方法
假设您有一个对象,在我的例子中是一个自定义Platform
对象,它将ID存储在变量中。我是这样做的:
def draw_platform(self, canvas): #Located in the Platform Class
self.ID = canvas.create_rectangle(self.x, self.y, self.x+self.w, self.y+self.h)
现在我可以使用这个ID来确定是否有任何对象与它重叠
def check_collision(self, plat, other_plat):
result = self.canvas.find_overlapping(plat.x, plat.y, plat.x + plat.w, plat.y + plat.h)
for i in result:
if i == other_plat.ID:
return True
return False
result
返回位于输入到find\u overlapping
中的矩形边界内的ID元组。您可以在元组中循环,查看是否有任何ID与其他形状匹配
这对于矩形-矩形碰撞和圆形-矩形碰撞非常有效