【发布时间】:2014-07-12 13:04:41
【问题描述】:
您好,我正在开发简单的太空入侵者克隆游戏,我需要想办法在我射击时检测子弹和外星人的碰撞。有什么建议么 ?谢谢
【问题讨论】:
-
欢迎来到 Stack Overflow。只问“我该怎么做……”而没有任何其他信息的问题通常不会被很好地接受。为了提高您获得答案的机会,您应该提供一些额外的信息来说明您已经尝试过什么以及您遇到的问题。
您好,我正在开发简单的太空入侵者克隆游戏,我需要想办法在我射击时检测子弹和外星人的碰撞。有什么建议么 ?谢谢
【问题讨论】:
使用 Pygame 代替 Tkinter(最终代替 Canvas)- 有检查碰撞的功能。
要检查碰撞,您必须获取两个元素的位置并检查它们之间的距离:
a2 + b2 = c2
a = x1 - x2、b = y1 - y2、c = distance between objects A(x1,y1) and B(x2,y2)
如果距离小于某个值,则发生碰撞 - 距离不必为零即可发生碰撞。这样你就可以检查物体周围的碰撞。
但是您可以检查对象周围方形区域的碰撞 - 计算它会更容易
对象A (x1,y1) 具有正方形区域x1-10 ... x1+10, y1-10 ... y1+10。您必须检查对象B (x2,y2) 是否在该方格中。
【讨论】:
您可以使用 tkinter 的 bbox 进行坐标检查,这将返回 4 个元组 x1, y1, x2, y2 ,它们是对象的左上角和右下角。稍微算一下,检查他们不在同一个空间中,并防止他们进入或当他们相遇时出现任何你想要的效果。
在你的数学过程中也可能有帮助的事情是
tkinter 的 find_overlapping。它返回侵入您的项目空间的元组。
tkinter 的 find_enclosed。它返回一个完全封闭的项目元组。
tkinter 的 find_closest。这为您的物品提供了一个凉爽的屏障。
还有很多很棒的词可以帮助您在这篇文章中发布的链接中。不幸的是,我的声誉太低,无法放置多个链接...
在 python 3 中检查 print((canvas.bbox(item)) 如果您想手动检查元组或将其打印在标签等中会有所帮助。
【讨论】: