如何检测两个canvas对象Tkinter的碰撞

时间:2014-07-12 13:04:42

标签: python tkinter

您好我正在开发简易空间入侵者克隆游戏,我需要弄清楚如何在我拍摄时检测子弹和外星人的碰撞。有什么建议 ?感谢

2 个答案:

答案 0 :(得分:1)

使用Pygame代替Tkinter(最终取代Canvas) - 有检查碰撞的函数。

要检查碰撞,您必须获取两个元素的位置并检查它们之间的距离:

a 2 + b 2 = c 2

a = x1 - x2b = y1 - y2c = distance between objects A(x1,y1) and B(x2,y2)

如果距离小于某个值则会发生碰撞 - 距离不一定为零以进行碰撞。这样就可以检查对象周围的圆周碰撞。

但你可以检查物体周围方形区域的碰撞 - 它会更容易计算出来

对象A (x1,y1)具有方形区域x1-10 ... x1+10, y1-10 ... y1+10。您必须检查对象B (x2,y2)是否在该方格中。

答案 1 :(得分:1)

您可以使用tkinter bbox进行坐标检查,这将返回4个元组,x1,y1,x2,y2,它们是对象的左上角和右下角。用一点点数学,检查它们是否在同一个空间内,防止它们进入或者遇到你想要的效果。

在数学期间可能也有帮助的事情

tkinter的find_overlapping。它返回一个入侵你的物品空间的元组。

tkinter的find_enclosed。它返回一个完全封闭的项目元组。

tkinter的find_closest。为您的物品提供了一个很酷的屏障。

以及更多精彩的文字,可以帮助您在这篇文章中发布的链接。不幸的是,我声名太低,无法提供多个链接...

在python 3中检查print((canvas.bbox(item))有助于手动检查元组或在标签等中打印它。