我正在使用 tkinter 在 Python 3 中编写一个简单的 2D 自上而下游戏。所有可碰撞的对象要么是圆/弧,要么是直线。我编写了以下方法来检测圆圈何时撞到一条线:
我正在使用公式 y = mx + b 和 r^2 = (xh)^2 + (yk)^2
def CheckHitCToL(self, LX0, LY0, LX1, LY1, CX0, CX1, Tab):
try:
H = self.Creatures[Tab].X
K = self.Creatures[Tab].Y
R = abs((CX0 - CX1) / 2)
M = (LY0 - LY1) / (LX0 - LX1)
B = M * (-LX1) + LY1
QA = (M * M) + 1
QB = (-H - H) + (((B - K) * M) * 2)
QC = (H * H) + ((B - K) * (B - K)) - (R * R)
X = (- QB + sqrt((QB * QB) - (4 * QA * QC))) / (2 * QA)
Y = (M * X) + B
if ((X <= LX0 and X >= LX1) or (X >= LX0 and X <= LX1)) and ((Y <= LY0 and Y >= LY1) or (Y >= LY0 and Y <= LY1)):
return True
else:
return False
except:
return False
我的问题是当你有一条垂直线时,M(或斜率)是(LY0 - LY1)/ 0。(这是因为斜率等于上升/运行,垂直线没有运行,只是一个上升)当然会返回一个错误,由try except捕获,然后通知我的移动方法没有发生碰撞。当然,我可以简单地将“try:”移动几行,但它仍然会引发错误。在使用垂直线时,如何调整此程序以不引发错误?